python读取word文档,使用ini中的正则表达式进行判断,但只有身份证号码的正则表达式可以准确进行判断,银行卡号码、电话号码要么无法判断,要么判断结果有误。
下面是判断的代码
def pwd_docx(old_filename, new_filename, password):
word_app = win32.gencache.EnsureDispatch('Kwps.Application')
word_app.Visible = 0
word_app.DisplayAlerts = 0
doc = word_app.Documents.Open(old_filename)
doc_range = doc.Range()
content = doc_range.Text.replace('\r', '\n')
doc.Close()
word_app.Quit()
print(content)
found_matches = re.findall(fetch_ini('身份证号码='), content)
print(fetch_ini('身份证号码='))
encrypt_count = len(found_matches)
encrypt_limit = 20
need_encrypt = False
print(encrypt_count)
if encrypt_count >= encrypt_limit:
need_encrypt = True
if need_encrypt:
word_app = win32.gencache.EnsureDispatch('Kwps.Application')
word_app.Visible = 0
word_app.DisplayAlerts = 0
doc = word_app.Documents.Open(old_filename)
doc.SaveAs(new_filename, Password=password)
doc.Close()
word_app.Quit()
return True
return False
def fetch_ini(word_str):
out_str = ''
with open('dsip-tool.ini', 'r', encoding='utf-8') as f:
for line in f:
if line.strip().startswith(word_str):
out_str = line.strip()
out_str = out_str[len(word_str):]
return out_str
请问各位知道是什么原因吗,困扰了一个星期了
补充:以下是我dsip-tool.ini里面的内容:
银行卡号码=(?:\d{15,19}|\d{3}-\d{4}-\d{4}-\d{4}|\d{4}\s\d{4}\s\d{4}\s\d{4})
身份证号码=\b(?:\d{17}[\dXx]|\d{15})\b
电话号码=^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\d{8}$
表格格式=xls,xlsx,xlsb,xlsm,et,etx
文档格式=wps,word,doc,docx
文本格式=
敏感信息条数=20
读取的时候,选择读取身份证号码,可以正确读取到并加密,但改成银行卡号码和电话号码时,却无法检测到。