Python正则表达式匹配问题:address2值无法完整捕获
解决正则表达式无法完整匹配带空格字段值的问题
问题原因
原正则表达式r'(\w+)\s*=\s*([-,\w]+)'的第二个捕获组[-,\w]+仅匹配字母、数字、下划线、连字符和逗号,不包含空格和句号。当匹配到address2的值里的空格时,因为不在字符集范围内,匹配会提前终止,所以只能捕获到ca,2nd。
解决方案
调整正则规则,让值的捕获范围延伸到下一个键值对的起始位置(即空格+键名+等号)或者字符串末尾。使用非贪婪匹配+正向预查来实现:
import re text = 'name = steve age=23 city = usa address1 = - address2 = ca,2nd floor ,3rd aven. qualification = doctor' # 修正后的正则 pattern = r'(\w+)\s*=\s*(.*?)(?=\s+\w+\s*=|$)' matches = re.findall(pattern, text) # 查看结果 for key, value in matches: print(f"{key}: {value}")
正则说明
(\w+):捕获键名,和原规则一致;\s*=\s*:匹配等号及前后任意数量的空格;(.*?):非贪婪匹配任意字符(包括空格、句号等),避免过度匹配到后续键值对;(?=\s+\w+\s*=|$):正向预查,指定停止匹配的条件——要么是下一个键值对的开头(空格+键名+等号),要么是字符串结尾。
执行后,address2的值会被完整捕获为ca,2nd floor ,3rd aven.。
内容的提问来源于stack exchange,提问作者Learn Hadoop
相关产品推荐
相关产品推荐

