python - 正则表达式 - 为什么这个正则表达式在 Python 中不起作用?

标签 python regex

我有这个表情

:([^"]*) \(([^"]*)\)

和这段文字

:chkpf_uid ("{4astr-hn389-918ks}")

:"#cert" ("false")

我正在尝试匹配它,以便在第一句话中得到这些组:

  1. chkpf_uid
  2. {4astr-hn389-918ks}

第二个,我会得到这些:

  1. #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/

相关文章:

javascript - 当我在正则表达式中放置空格键时,为什么我的 Javascript test() 函数会失败?

regex - 如何使用正则表达式将 Visual Studio 二进制编辑器中的空字节 (0x00) 与查找匹配?

java - ReplaceAll 在字符串上无法按预期工作

javascript - switch 语句中的 RegExp 构造函数

python - 将符合上次修改窗口的 S3 文件读入 DataFrame

python - 根据变量值命名字典

python - 带有 python 的 tkinter 中的默认输入字段

python - 在 Python 中定义过程的基础知识?

python - 在 Python 的 ast 中理解 ctx

php - 用于匹配 IP 地址的正则表达式