关于#python#的问题:python读取word文档,使用ini中的正则表达式进行判断,但只有身份证号码的正则表达式可以准确进行判断,银行卡号码、电话号码要么无法判断

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


读取的时候,选择读取身份证号码,可以正确读取到并加密,但改成银行卡号码和电话号码时,却无法检测到。

调试一下,你这个要结合 word 文档调试
print(content)
这里输出什么
return out_str
这里返回什么
是否有电话号码、卡号之类的
另外,你的代码里怎么没看到正则表达式

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7433562
  • 除此之外, 这篇博客: python基础练习题中的 题目六:通过这个练习,你会尝试用循环来解决生活中的问题,并了解一种新的列表方法,练习要求:小明、小红、小刚是同班同学,且坐在同一排,分别坐在第一位、第二位、第三位。由于他们的身高都差不多,所以,老师计划让他们三个轮流坐在第一位。每次换座位的时候,第一位变第三位,后面两位都往前一位。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • pop():将列表指定位置的元素移除,同时可以将移除的元素赋值给某个变量

    程序分析:

    思路解析:首先创建列表,轮流换位可知会有循环语句,接下来将列表的第一个用pop()除掉并赋值给N,再将N添加进列表list1即可。

    代码解析:

    list1 = ["小明", "小红", "小刚"]
    n = 0
    while n < 3:
        n += 1
        N = list1.pop(0)
        list1.append(N)
        print(list1)