我的数据遵循文本文件中的重复模式。打印出具有唯一值的相同类型数据结构,直到文件末尾
{'AuthorSite': None,
'FirstText': None,
'Image': None,
'SrcDate': None,
'Title': None,
'Url': None}
...
..
.
我尝试使用sublime文本中的正则表达式一次匹配每个块一个。我尝试了各种各样的形式但没有成功。最新的一个是:
\{(.|\s)\}
我想把每对支架之间的所有东西都清理干净。请指教。我最终将在python中实现它。
答案 0 :(得分:2)
\{([^}]+)\}
你可以尝试一下。参见演示。
http://regex101.com/r/hQ9xT1/32
import re
p = re.compile(ur'{([^}]+)}')
test_str = u"{'AuthorSite': None,\n 'FirstText': None,\n 'Image': None,\n 'SrcDate': None,\n 'Title': None,\n 'Url': None}"
re.findall(p, test_str)
你的正则表达式\{(.|\s)\}
没有用,因为你还没有量化它。使用\{(?:.|\s)+\}
。
答案 1 :(得分:1)
假设您想要检索值,我会使用以下正则表达式
\{([^\}]+)\}
这里的关键是[^}]字符类,它匹配任何不是文字的字符。空格,边框字符,字母,数字等。
这是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&#39 ;:无,\ n' FirstText&#39 ;:无,\ n'图片&#39 ;:无,\ n&#39 ; SrcDate&#39 ;:无,\ n'标题':无,\ n' Url':无", "' AuthorSite&#39 ;:无,\ n' FirstText&#39 ;:无,\ n'图片':无,\ n' SrcDate&#39 ;:无,\ n'标题':无,\ n'网址':无"]
话虽这么说,如果你输入的文字只不过是这些文字,你可能最好使用像json这样的东西把它们直接拉到python dicts中。