使用两个正则表达式来搜索文件

时间:2011-05-09 15:53:29

标签: python regex

我的正则表达式都有效,我想要做的是让第一个读取文件并在每次匹配时打印(这都有效)然后当它找到匹配的第二个表达式时,它会打印一个匹配项它。因此,在我导入的文件中,它将匹配所有数字,然后一旦找到“BREAK”,它就会打印“BREAK”。我得到的是它在找到匹配的每个数字后打印'BREAK'。我的目标是在程序看到“BREAK”字样后停止搜索匹配号码。

      for m in re.finditer(r'((((2)([0-3]))|(([0-1])([0-9])))([0-5])([0-9]))', text):
        print(m.group(0))
        l=re.search(r'(BREAK)', text)
        if l:
            print(l.group(0))

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

问题在于,当您搜索“BREAK”时,您正在搜索整个文本,而不是搜索到的数字后面显示的文本。因此,如果文本中的任何地方都有“BREAK”,则始终会找到它。

似乎finditer()可能不适合您的情况。最好自己迭代文件的行,你可以更好地控制循环。

with open("test.txt") as f:
  for line in f:
    if re.match("BREAK", line):
      print("Break")
      break
    m = re.match(r'((((2)([0-3]))|(([0-1])([0-9])))([0-5])([0-9]))', line)
    if m:
      print(m.group(0))

答案 1 :(得分:0)

你显然需要这样做:

import re

text = '''-- 000 == 111 ** 222
@@ 444 ## 555 BREAK 666 :::
777 ,,, 888 &&&'''

regx = re.compile('\d(\d)\d')
brek = text.find('BREAK')
li = [m.group() for m in regx.finditer(text,0,(brek if brek+1 else len(text)))]
print li
print
print '\n'.join(li)

结果

['000', '111', '222', '444', '555']

000
111
222
444
555