Python正则表达式在多行上匹配字符
我有一个格式如下的文件:Python正则表达式在多行上匹配字符,python,regex,python-2.7,newline,Python,Regex,Python 2.7,Newline,我有一个格式如下的文件: hello = { a = "2354a" b = "06567567h" } goodbye = { there = "/home/afhge" } ... anotherset = { dsfsdf = grhbrwecs dfgtmyj = 12345 } 我在python中使用正则表达式,我希望匹配大括号内的所有内容,因此生成的匹配输出如下所示: ['\n\n\ta = "2345a"\n\
hello = {
a = "2354a"
b = "06567567h"
}
goodbye = {
there = "/home/afhge"
}
...
anotherset = {
dsfsdf = grhbrwecs
dfgtmyj = 12345
}
我在python中使用正则表达式,我希望匹配大括号内的所有内容,因此生成的匹配输出如下所示:
['\n\n\ta = "2345a"\n\tb = "06567567h"\n\n\n', '\n\there = "/home/afhge"\n\n', '\n\tdsfsdf = grhbrwecs\n\tdfgtmyj = 12345\n\n']
我试过正则表达式:
desired_output = re.findall("{[^}]", file_text)
但是,此正则表达式会导致以下列表:
['{\n', '{\n', '{\n', '{\n', '{\n']
它看起来像[^}]匹配任何字符直到换行符。我试过做:
desired_output = re.findall("{[^}]", file_text, re.S)
及
没有成功:(
谢谢!不,您的字符类是正确的。它将匹配任何不是
}
的字符(甚至换行符)。问题是[^}]
只匹配一个字符。只需使用重复量词(您可能应该转义{
):
关于您尝试的选项。如果有任何re.S
会有所帮助,因为没有它,
就不匹配换行符。但是
实际上是受re.S
影响的唯一选项。另一个选项re.M
与它无关。这只会使锚点^
和$
在行的开始和结束
此外,由于您只需要括号内的内容,因此不需要匹配{
本身,但可以使用lookback:
r"(?<=\{)[^}]*"
r”(?没有您的字符类是正确的。它将匹配任何不是}
的字符(甚至换行)。问题是[^}]
只匹配一个字符。只需使用重复量词(您可能应该转义{
):
关于您尝试的选项。如果有任何re.S
会有所帮助,因为没有它,
就不匹配换行符。但是
实际上是受re.S
影响的唯一选项。另一个选项re.M
与它无关。这只会使锚点^
和$
在行的开始和结束
此外,由于您只需要括号内的内容,因此不需要匹配{
本身,但可以使用lookback:
r"(?<=\{)[^}]*"
r”(?你应该使用)你应该使用(?你应该使用)(?太棒了,谢谢!至于没有在匹配中包含{,我只是在我想要显示的代码周围放了括号。我的新正则表达式:“{([^}]*)”@m3hughes是的,这是另一种可能性。太棒了,谢谢!至于没有包含{在匹配中,我只是在我想要显示的代码周围放了括号。我的新正则表达式:“\{([^}]*)”@m3hughes是的,这是另一种可能性。有效,但我给了m.buettner的答案验证,因为它有更多关于re.s和re.m的细节,这是有用的。有效,但我给了m.buettner的答案验证,因为它有更多关于re.s和re.m的细节,这是有用的。
r"(?<=\{)[^}]*"