如何使用REGEX与多个过滤器

时间:2016-10-18 04:11:09

标签: python regex

text变量描述了三个DAY:

text = """
DAY {
 foo 12 5 A
 foo 
 12345
}
DAY {
 day 1
 day 2
 file = "/Users/Shared/docs/doc.txt"
 day 3
 end of the month
}
DAY {
 01.03.2016 11:15
 01.03.2016 11:16
 01.03.2016 11:17
}"""

所有三个DAY定义都以DAY(在行的开头)开头,然后是空格和花括号。结束表示关闭括号始终位于行的开头。 所以我们可以说每个DAY的边界都在花括号{}中定义。

使用regex我需要“找到”其边界内包含file = "/Users/Shared/docs/doc.txt"行的DAY。

我开始编写正则表达式:

string = """DAY {\n [A-Za-z0-9]+}"""

result = re.findall(string, text)

但表达式停止在空白字符前面的foo末尾找到文本。如何修改表达式,使其返回其正文中有file = "/Users/Shared/docs/doc.txt"的第二个DAY,结果如下:

DAY {
 day 1
 day 2
 file = "/Users/Shared/docs/doc.txt"
 day 3
 end of the month
}

1 个答案:

答案 0 :(得分:1)

要在多行文本上执行正则表达式匹配,您需要使用参数re.MULTILINE编译正则表达式。

这段代码应该按照您的要求运行。

regex = re.compile("""(DAY\s*\{[^\{\}]*file\ \=\ \"/Users/Shared/docs/doc\.txt\"[^\{\}]*\})""", re.MULTILINE)
regex.findall(text)

结果:

['DAY {\n day 1\n day 2\n file = "/Users/Shared/docs/doc.txt"\n day 3\n end of the month\n}']