Python正则表达式匹配,直到多行的字符

m3h*_*hes 1 python regex newline python-2.7

我有一个格式如下的文件:

hello = {

     a = "2354a"
     b = "06567567h"


}

goodbye = {
     there = "/home/afhge"

}

...

anotherset = {
      dsfsdf = grhbrwecs
      dfgtmyj = 12345

}
Run Code Online (Sandbox Code Playgroud)

我在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']
Run Code Online (Sandbox Code Playgroud)

我试过正则表达式:

desired_output = re.findall("{[^}]", file_text)
Run Code Online (Sandbox Code Playgroud)

但是这个正则表达式导致列表:

['{\n', '{\n', '{\n', '{\n', '{\n']
Run Code Online (Sandbox Code Playgroud)

看起来[^}]匹配任何字符直到换行符.我试过做:

desired_output = re.findall("{[^}]", file_text, re.S)
Run Code Online (Sandbox Code Playgroud)

desired_output  = re.findall("{[^}]", file_text, re.M)
Run Code Online (Sandbox Code Playgroud)

没有成功:(.

谢谢!

Mar*_*der 8

没有你的角色类是对的.它将匹配任何不是}(甚至换行符)的字符.问题是[^}]只匹配一个字符.只需使用重复量词(你应该逃避{):

r"\{[^}]*"
Run Code Online (Sandbox Code Playgroud)

关于您尝试的选项.如果有什么re.S可以帮助,因为没有它.不匹配换行符.但这.是唯一受影响的事情re.S.另一种选择re.M与它无关.这只是使得锚点^$匹配在线的开头和结尾.

此外,由于您只需要括号内的内容,因此您不需要匹配{自身,但您可以使用lookbehind:

r"(?<=\{)[^}]*"
Run Code Online (Sandbox Code Playgroud)

这不包括{在比赛中.