Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式在多行上匹配字符_Python_Regex_Python 2.7_Newline - Fatal编程技术网

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"(?<=\{)[^}]*"