我有这个表情
:([^"]*) \(([^"]*)\)
和这段文字
:chkpf_uid ("{4astr-hn389-918ks}")
:"#cert" ("false")
我正在尝试匹配它,以便在第一句话中得到这些组:
- chkpf_uid
- {4astr-hn389-918ks}
第二个,我会得到这些:
#cert
- 假
我想避免得到报价。
我似乎无法理解为什么我使用的表达式与这些不匹配,特别是如果我将 [^"]*
切换为 (.*)
.
与([^"]*)
:wont match
与 (.*): does match, but with quotes
这是使用Python 2.7中的re
模块
最佳答案
旁注:您的输入可能需要特定的解析器来处理,特别是如果它可能具有转义序列。
回答问题本身,请记住正则表达式是从左到右顺序处理的,并且这里的字符串处理方式相同。如果模式与部分/整个字符串匹配(取决于所使用的方法),则返回匹配项。
如果字符串中有引号,并且您的模式不允许匹配这些引号,则匹配将失败,不会返回任何匹配项。
可能的解决方案是将引号添加为可选子模式:
:"?([^"]*)"? \("?([^"]*)"?\)
^^ ^^ ^^ ^^
请参阅regex demo
您需要的部分被捕获到组中,并且引号(无论是否存在)都会匹配,超出您的 re.findall
范围。
关于python - 正则表达式 - 为什么这个正则表达式在 Python 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38696855/