Python正则表达式模式不匹配

时间:2011-10-13 12:36:31

标签: python regex file

我正在尝试使用一些正则表达式来解析存储在一组lua文件中的一些值,每行看起来像这两行中的一行

  1. ITEM.ID = 'item_clock';\r\n
  2. ITEM.Cost = 150;\r\n
  3. 当我在第一行运行我的正则表达式模式时,我得到了预期的结果

    >>> re.search("ITEM.(?P<key>[a-zA-Z]\w) = (?P<value>.*);", line).groupdict()
    {'key': 'ID', 'value': "'item_clock'"}
    

    然而,当我在第二行上运行它时,我没有得到Match对象。

2 个答案:

答案 0 :(得分:7)

正则表达式查找ITEM.后跟一个字母,然后是正好一个字符(正则表达式中的\w)。

你可能意味着ITEM.(?P<key>[a-zA-Z]\w*) ......(注意添加的星号)。这将查找ITEM.后跟一个字母,然后是零个或多个字符。

此外,最好将raw strings用于正则表达式,以避免难以发现的错误:

r"ITEM.(?P<key>[a-zA-Z]\w*) = (?P<value>.*);"

(注意r前缀)。

答案 1 :(得分:1)

接受的答案是对的。小调整......

  • 逃避“。”在ITEM之后意味着“。”而不只是任何事情
  • 通常一个好主意是在“=”周围允许多个空格(或没有空格)

    r“ITEM \。(?P&lt; key&gt; [a-zA-Z] \ w *)* = *(?P&lt; value&gt;。*?)*;”

相关问题