我有一个包含多行的文件。我需要一个正则表达式来查找包含多次出现的特定字符串的所有组。 如果文件有:
开始
中间
随机
中间
结束
开始
中间
随机
结束
开始
中间
随机
中间
结束
我希望正则表达式只匹配粗体行作为单独的组,其中 MIDDLE 出现不止一次:
开始
中间
随机
中间
结束
开始
中间
随机
结束
开始
中间
随机
中间
结束
我试过的是这个和几个变体,但它不符合我需要的组。
(START(?:\nMIDDLE){2,}(?:\nMIDDLE)*\nEND)
(START\*STUFF~(?:\nMIDDLE\*STUFF~){2,}(?:\nMIDDLE\*STUFF~)*\nEND\*STUFF~)
使用两个表达方式:
import re
data = """
START
MIDDLE
RANDOM
MIDDLE
END
START
MIDDLE
RANDOM
END
START
MIDDLE
RANDOM
MIDDLE
END
"""
rx_block = re.compile(r'^START.+?^END', re.M | re.S)
rx_inner = re.compile(r'MIDDLE')
for block in rx_block.finditer(data):
occurences = rx_inner.findall(block.group(0))
if len(occurences) > 1:
print(block.group(0))
请参阅 ideone.com 上的演示.