在Sublime Text中跨多行匹配的正则表达式

时间:2014-11-30 18:58:36

标签: python regex

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

{'AuthorSite': None,
 'FirstText': None,
 'Image': None,
 'SrcDate': None,
 'Title': None,
 'Url': None}
...
..
.

我尝试使用sublime文本中的正则表达式一次匹配每个块一个。我尝试了各种各样的形式但没有成功。最新的一个是:

\{(.|\s)\}

我想把每对支架之间的所有东西都清理干净。请指教。我最终将在python中实现它。

2 个答案:

答案 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中。