Python re模块正则匹配多词字符串失效问题求解
问题根因
原正则取值部分使用\w+匹配规则,该规则仅能匹配连续的字母、数字、下划线字符,遇到空格、连字符这类非单词字符就会终止匹配,因此只能捕获到等号后的第一个单词片段。
修正实现
根据示例的文本格式,取值的终止边界为行尾的逗号,调整正则匹配规则,捕获等号后到逗号前的所有有效内容,同时自动过滤值首尾的多余空白:
import re data = 'DisplayName = Umarex Steel Storm BB-Gun ,' pattern = r'(\w+)\s*=\s*([^,]+?)\s*,' match_result = re.findall(pattern, data) print(match_result)
运行输出:
[('DisplayName', 'Umarex Steel Storm BB-Gun')]
正则逻辑说明
(\w+):匹配等号左侧的键名,和原逻辑一致\s*=\s*:匹配等号以及等号前后任意数量的空格、制表符等空白字符([^,]+?):非贪婪匹配所有非逗号字符,覆盖值中包含的空格、连字符等特殊符号\s*,:匹配值末尾到逗号之间的多余空白,确保这部分空白不会被捕获到值的结果中
如果你的键值对取值以行尾为边界、没有末尾逗号,只需要把正则替换为r'(\w+)\s*=\s*(.+?)\s*$',搭配re.MULTILINE标志即可逐行匹配所有符合规则的键值对。
内容的提问来源于stack exchange,提问作者Lun
相关产品推荐
相关产品推荐

