Python正则表达式字母和空格

时间:2013-12-13 14:53:36

标签: python regex string

我有一个包含随机垃圾ascii字符的文件。

但是,在文件中还有一条用英文写的信息。

像这样:

...˜ÃÕ=òaãNÜ ß§#üxwáã MESSAGE HIDDEN IN HERE ŸÎ=N‰çÈ^XvU…”vN˜...

我正在尝试编写一个python正则表达式,它将查找以6个字母或空格开头并以6个字母结尾的模式。

这样,只要消息的长度最少为字符或空格,就应该输出消息。

这是我提出来的,但它似乎没有起作用。

regex = re.compile('''
([A-Z ]){6,}                                        
([A-Z ]){6,}              
''', re.I | re.X )

3 个答案:

答案 0 :(得分:1)

你的正则表达式:

([A-Z ]){6,}                                        
([A-Z ]){6,}

不起作用,因为你可以看到它在两组之间需要相当多的空间:

Regular expression visualization


这就是你要找的东西:

import re

reg = re.compile( "[A-Z ]{6,}[A-Z ]{6,}")
string = "...˜ÃÕ=òaãNÜ ß§#üxwáã MESSAGE HIDDEN IN HERE ŸÎ=N‰çÈ^XvU…”vN˜..."

print reg.findall(string)

输出:

[' MESSAGE HIDDEN IN HERE ']

答案 1 :(得分:1)

尝试以下正则表达式。使用您的示例我只需要检查一个组:

import re
pattern_obj = re.compile('[a-zA-Z ]{6,}', re.I)
extracted_patterns = pattern_obj.findall(ur'your_string')
print extracted_patterns

从Stackoverflow标签 - 我假设你使用Python 2.在这种情况下你必须采取 关心读入的字符串是unicode。

输出

[u' MESSAGE HIDDEN IN HERE ']

一般建议:有时很难找到一个好的正则表达式。在这种情况下,大多数未知的标志re.DEBUG非常有用。

pattern_obj = re.compile('[a-zA-Z ]{6,}', re.DEBUG)
max_repeat 6 4294967295
  in
    range (97, 122)
    range (65, 90)
    literal 32

答案 2 :(得分:0)

import re
word = re.compile('[a-zA-Z\s]{6,}.+[[a-zA-Z\s]{6,}]')

filein = open(filename, 'rb).read()
print re.findall(word, filein)