我花了两天时间尝试构建正则表达式,找到两个单词/数字顺序出现在不同的行上。 我有一个文件,如:
1 [pid 29743] 18:58:19 prctl(PR_CAPBSET_DROP, 0x9, 0, 0, 0 <unfinished ...>
2 [pid 29746] 18:58:19 <... mprotect resumed> ) = 0
3 [pid 29743] 18:58:19 <... prctl resumed> ) = 0
4 [pid 615] 18:58:19 <... ioctl resumed> , 0xffffffffffb4f054) = 0
5 [pid 29743] 18:58:19 prctl(PR_CAPBSET_READ, 0xa, 0, 0, 0 <unfinished ...>
6 [pid 615] 18:58:19 ioctl(13, 0x40047703 <unfinished ...>
7 [pid 29743] 18:58:19 <... prctl resumed> ) = 1
8 [pid 29746] 18:58:19 mprotect(0xfffffffff4ae2000, 4096, PROT_NONE <unfinished ...>
9 [pid 29743] 18:58:19 prctl(PR_CAPBSET_DROP, 0xa, 0, 0, 0 <unfinished ...>
10 [pid 615] 18:58:19 <... ioctl resumed> , 0x7fd19062e0) = 0
11 [pid 29743] 18:58:19 <... prctl resumed> ) = 0
12 [pid 29746] 18:58:19 <... mprotect resumed> ) = 0
13 [pid 29743] 18:58:19 prctl(PR_CAPBSET_READ, 0xb, 0, 0, 0 <unfinished ...>
14 [pid 29746] 18:58:19 ioctl(13, 0x40047703,
<unfinished ...>
15 [pid 29743] 18:58:19 <... prctl resumed> ) = 1
16 [pid 615] 18:58:19 <... ioctl resumed> , 0x7fd19064b0) = 0
我正在寻找在文本上顺序出现的两个值0x7fd19062e0和0x7fd19064b0。它们出现在第10和第16行。 我想构建正则表达式,告诉我是否出现顺序 这是我的代码
file = open("text.txt", a+)
for line in file:
text += line
if re.findall(r"^.*0x7fd19062e0.*0x7fd19064b0", text, re.M):
print 'found a match!'
else:
print 'no match'
答案 0 :(得分:1)
re.M
修改^
和$
锚点的行为。对于“点匹配换行符”选项,您需要re.S
。另外,如果您只想查找是否匹配,请不要使用re.findall()
:
file = open("text.txt") # why append mode?
text = file.read() # no need to build the string line by line
if re.search(r"\b0x7fd19062e0\b.*\b0x7fd19064b0\b", text, re.S):
print 'found a match!'
else:
print 'no match'
请注意,我添加了word boundary anchors以确保只匹配整个十六进制数字(否则,可能会有更长数字的子匹配)。这可能与您的情况有关,也可能不相关,但这可能是一种很好的做法。
答案 1 :(得分:0)
无需RE:
f = open('text.txt')
numerated_lines = enumerate(f.readlines())
lines_with_pattern = filter(lambda l: '0x7fd19062e0' in l[1], enumerated_lines)
pairs = zip(lines, lines[1:])
result = filter(lambda p: p[0][0]+1 == p[1][0], pairs)