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)
没有成功:(.
谢谢!
没有你的角色类是对的.它将匹配任何不是}(甚至换行符)的字符.问题是[^}]只匹配一个字符.只需使用重复量词(你应该逃避{):
r"\{[^}]*"
Run Code Online (Sandbox Code Playgroud)
关于您尝试的选项.如果有什么re.S可以帮助,因为没有它.不匹配换行符.但这.是唯一受影响的事情re.S.另一种选择re.M与它无关.这只是使得锚点^和$匹配在线的开头和结尾.
此外,由于您只需要括号内的内容,因此您不需要匹配{自身,但您可以使用lookbehind:
r"(?<=\{)[^}]*"
Run Code Online (Sandbox Code Playgroud)
这不包括{在比赛中.