正则表达式 - 为什么这个正则表达式不适用于Python?

时间:2016-08-01 10:46:18

标签: python regex

我有这个表达

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

和本文

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

:"#cert" ("false")

我试图匹配它,以便在第一句话中生病得到这些群体:

  1. chkpf_uid
  2. {4astr-hn389-918ks}
  3. 而在第二天,生病得到这些:

    1. #cert
    2. 我想避免收到报价。

      我似乎无法理解为什么我使用的表达式与这些表达式不匹配,特别是如果我将[^"]*切换为(.*)

      ([^"]*)wont match

      with(。*):does match, but with quotes

      这是在python 2.7中使用re模块

1 个答案:

答案 0 :(得分:1)

旁注:您的输入可能需要特定的解析器来处理,特别是如果它可能有转义序列。

回答问题本身,请记住正则表达式从左到右依次处理顺序,并且字符串在这里处理相同。如果模式匹配部分/整个字符串(取决于使用的方法),则返回匹配。

如果字符串中有引号,并且您的模式不匹配这些引号,则匹配将失败,不会返回匹配。

可能的解决方案是将引号添加为otpional子模式:

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

请参阅regex demo

您需要的部分会被捕获到群组中,报价(无论是否存在)只是匹配,不在re.findall范围之内。