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)