在一个txt文档中,需要用正则表达式把身份证号码和手机号码提取出来。结果是:部分手机号码提取出来,紧跟在中文后面的手机号码无法提取。
python
import codecs
# -*- coding: UTF-8 -*-
import os
import re
def txtreg(filename):
fr = codecs.open(filename,'r','utf-8')
for line in fr:
flag = 0
line = line.strip()
line = line.split()
for j in range(len(line)):
result_id = re.match(id_pattern,line[j].encode('utf-8').decode('utf-8','ignore'))
result_ph = re.match(phone_pattern,line[j].encode('utf-8').decode('utf-8','ignore'))
if result_id:
flag = 1
print(result_id.group(),end=' ')
if result_ph:
flag = 1
print(result_ph.group(),end=' ')
if flag:
print()
#主程序
if __name__=='__main__':
logfilename = r"x:/jz/log.txt"
f = open(logfilename,'w')
phone_pattern = re.compile(u'^1[3-9]\d{9}(?!\d)',re.I)
id_pattern = re.compile(u'\d{6}[1-2]\d{10}[X\d](?!d)',re.I)
txtreg('x:/jz/test.txt')
f.close()
部分手机号码提取出来,紧跟在中文后面的手机号码和身份证号码无法匹配。
尝试的思路:包括在正则表达式前+r或者u,把要匹配的字符串编码和解码encode('utf-8').decode('utf-8','ignore')
我想要把手机号码和身份证号码都提取出来。