Python 升华文本中跨多行匹配的正则表达式

Python 升华文本中跨多行匹配的正则表达式,python,regex,Python,Regex,我的数据在文本文件中遵循重复模式。具有唯一值的同一类型数据结构打印到文件末尾 {'AuthorSite': None, 'FirstText': None, 'Image': None, 'SrcDate': None, 'Title': None, 'Url': None} ... .. . 我试图使用升华文本中的正则表达式一次一个地匹配每个块。我尝试过各种形式,但都没有成功。最新的是: \{(.|\s)\} 我想把每一副牙套之间的东西都穿上。请告知。我最终将用python实现这

我的数据在文本文件中遵循重复模式。具有唯一值的同一类型数据结构打印到文件末尾

{'AuthorSite': None,
 'FirstText': None,
 'Image': None,
 'SrcDate': None,
 'Title': None,
 'Url': None}
...
..
.
我试图使用升华文本中的正则表达式一次一个地匹配每个块。我尝试过各种形式,但都没有成功。最新的是:

\{(.|\s)\}
我想把每一副牙套之间的东西都穿上。请告知。我最终将用python实现这一点

\{([^}]+)\}
您可以尝试以下演示:


您的正则表达式
\{(.\124;\ s)\}
不起作用,因为您没有对它进行量化。使用
\{(?:.|\s)+\}

假设要检索值,我将使用以下正则表达式

\{([^\}]+)\}
这里的键是[^}]字符类,它匹配任何不是literal}字符的内容。空格、边框字符、字母、数字等

以下是Python代码:

import re
hoover_exp = re.compile(r'\{([^\}]+)\}')
with(open('data.txt', 'r') as infile):
    text = infile.read()
matches = hoover_exp.findall(text)
匹配项将是文本中所有非重叠匹配项的列表。e、 g

[“'AuthorSite':无、\n'FirstText':无、\n'Image':无、\n'SrcDate':无、\n'Title':无、\n'Url':无”, “'AuthorSite':无,\n'FirstText':无,\n'Image':无,\n'SrcDate':无,\n'Title':无,\n'Url':无”]


也就是说,如果您输入的文本只是这些dict,那么最好使用json之类的东西将它们直接拉入Python dict。

非常好,在Sublime中,它必须输入为\{([^}]+)\}才能工作。你能用简单的英语解释一下正则表达式吗?你的正则表达式有两个缺点:第一:你没有提供任何量词(例如一个重复操作符。*+?),所以它只匹配像{a}或{}或{\n}这样的字符串。第二:即使有量词,'}文本字符也会被'.'操作符捕获,由于正则表达式在默认情况下是贪婪的,如果有两个这样的大括号组相邻,那么您将在同一个组中获取它们。不是你想要的,我期待的。所以,如果正则表达式是\{(.\124;\ s)+?\},我想你会更幸运。
import re
hoover_exp = re.compile(r'\{([^\}]+)\}')
with(open('data.txt', 'r') as infile):
    text = infile.read()
matches = hoover_exp.findall(text)