如何调整正则表达式以匹配含空格的键值对值?
正则调整方案
原有正则的问题
- 未匹配键名前的
--前缀,和实际--key=value的格式不符 value用\w+仅能匹配字母、数字、下划线,无法处理带空格、特殊字符的值- 错误用
\s+分隔键和值,实际键值对是通过=连接的
调整后的正则表达式
import re # 基础版:匹配值到下一个--前缀或字符串结尾 pattern = r'--(?P<key>\w+)=(?P<value>.+?)(?=\s--|$)' # 测试示例 test_cases = [ "--key1=this is value 1 --key2=value2", "--key1=only kvp", "--key1=this/doesnt/work/" ] for case in test_cases: matches = re.findall(pattern, case) print(matches)
正则规则解释
--:精准匹配键名前的固定前缀(?P<key>\w+):捕获键名(假设键名仅包含字母、数字、下划线,符合常见命令行参数命名逻辑)=:匹配键与值之间的分隔符(?P<value>.+?):非贪婪模式匹配任意字符(默认不含换行),避免把下一个键值对的内容包含进来(?=\s--|$):正向预查边界,确保值的结束位置是下一个键的--前缀(前面带空格)或字符串末尾
扩展:支持带换行的值
如果值中包含换行符,需添加re.DOTALL标志,让.可以匹配换行:
matches = re.findall(pattern, case, flags=re.DOTALL)
内容的提问来源于stack exchange,提问作者chrisans
相关产品推荐
相关产品推荐

