Python正则表达式处理多行地址仅匹配首行问题排查
问题分析与解决
你的正则只提取到第一行,核心问题有两个:
- 空格匹配不一致:原地址文本里是
Address:(冒号前无空格),但你的正则写的是Address :(冒号前多了空格),这会导致匹配逻辑错位——你说能提取到第一行,推测实际文本里可能带有空格,但这个细节必须和实际内容对齐。 - 无法跨多行匹配:
.*默认只匹配除换行符外的任意字符,re.MULTILINE的作用仅仅是让^和$匹配每行的开头/结尾,并不会改变.的匹配规则。所以你的正则只能捕获Address :所在行的内容,没法跨多行匹配到后续的地址行和邮编。
要实现从Address:到6位邮政编码的完整匹配,需要做两个调整:
- 修正正则里的空格,和实际文本的
Address:格式保持一致; - 加上
re.DOTALL(或re.S)标志,让.能匹配换行符,同时用非贪婪匹配+邮编定位来精准结束匹配。
修正后的正则示例:
re.findall(r'Address:(.*?\d{6})', text, re.DOTALL)
如果实际文本里Address和冒号之间确实有空格,就改成:
re.findall(r'Address :(.*?\d{6})', text, re.DOTALL)
关键说明
re.DOTALL:让.匹配包括换行在内的所有字符,实现跨多行捕获;.*?:非贪婪匹配,避免过度捕获超出邮编范围的内容;\d{6}:精准匹配6位邮政编码,作为整个匹配的结束标志。
内容的提问来源于stack exchange,提问作者Adarsh Nair
相关产品推荐
相关产品推荐

