我有一个包含随机垃圾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 )
答案 0 :(得分:1)
你的正则表达式:
([A-Z ]){6,}
([A-Z ]){6,}
不起作用,因为你可以看到它在两组之间需要相当多的空间:
这就是你要找的东西:
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)