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
}
答案 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}']