使用pdftotext提取PDF文本后如何用正则提取Account Number字段
正则匹配失败原因
你使用的正则^(Account\s+Number).*$默认下,Python的re模块中^仅匹配整个字符串的起始位置,$仅匹配整个字符串的结束位置。而Account Number对应的行在你的整段文本中间,所以无法匹配。
实现方案
你可以通过添加正则匹配标志、调整正则规则两种方式解决,两种方式都可以直接提取到账号值:
方法1:添加多行匹配标志
给正则添加re.MULTILINE标志,让^和$可以匹配每一行的起止位置,同时用捕获组提取冒号后的账号内容,示例代码如下:
import re # data为你已经提取到的整段PDF文本 match_res = re.search(r'^Account\s+Number\s*:\s*(\d+)', data, flags=re.MULTILINE) if match_res: # 提取捕获组中的账号内容 account_num = match_res.group(1) print(account_num) # 输出结果:00000031873583221
规则说明:
\s*匹配字段名、冒号前后的任意空白字符,兼容PDF提取后可能出现的多空格、制表符排版问题(\d+)捕获冒号后的连续数字,即目标账号- 如果账号存在非数字字符,可以把
\d+替换为.*,同时在末尾加$,即正则写为r'^Account\s+Number\s*:\s*(.*)$',即可捕获整行冒号后的所有内容。
方法2:去掉行匹配限制
如果不需要严格匹配行开头,可以直接简化正则,无需额外标志即可匹配:
import re match_res = re.search(r'Account\s+Number\s*:\s*(\d+)', data) if match_res: account_num = match_res.group(1)
这种方法适合确认文本中只会出现一次Account Number字段的场景,写法更简洁。
内容的提问来源于stack exchange,提问作者senarijit1618
相关产品推荐
相关产品推荐

