Python正则表达式匹配问题

时间:2016-04-12 09:57:59

标签: python regex matching

我有正则表达式和Python的问题。我写了一个简单的工具,它将搜索文本文档以查找我想要搜索的行,然后应该创建一个新的文本文件并从原始文件中复制提取的行。

这是文本文档的内容,在另一行之下:

  1. C:\ ProgramData \ 3ebdd88b-6153-1
  2. C:\ ProgramData \ 3ebdd88b-2d35-0
  3. C:\ ProgramData {2a0cdb44-612c-1}
  4. C:\ ProgramData {27e4a155-512c-0}
  5. 为了匹配第3和第4行我使用了这个:

    for line in lines:
            if re.search("ProgramData\\\{[\w\-]+\}", line) >= 0:
                fixes.append(line)
    

    但是我遇到了第1行和第2行的问题,无论我使用哪种模式正在使用正则表达式测试器,它都无法在以后找到这些行。

    感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用以下RegEx:

ProgramData(?:\{[\w-]+\}|\\[\w-]+)

Live Demo on Regex101

您的新代码将是:

for line in lines:
    if re.search("ProgramData(?:\{[\w-]+\}|\\[\w-]+)", line) >= 0:
        fixes.append(line)

Demo on Ideone

RegEx如何运作:

ProgramData          # ProgramData
(?:                  # Non-Capturing Group for data after ProgramData
  \{[\w-]+\}           # {} enclosing a Letter or - (Hyphen) one or more times
  |                    # OR
  \\[\w-]+             # \ followed by a Letter or - (Hyphen) one or more times
)

Demo