我的正则表达式都有效,我想要做的是让第一个读取文件并在每次匹配时打印(这都有效)然后当它找到匹配的第二个表达式时,它会打印一个匹配项它。因此,在我导入的文件中,它将匹配所有数字,然后一旦找到“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))
有什么想法吗?
答案 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