查找行组的正则表达式,其中以特定字符串开头的组中的某些行出现不止一次

问题描述 投票:0回答:2

我有一个包含多行的文件。我需要一个正则表达式来查找包含多次出现的特定字符串的所有组。 如果文件有:


开始
中间
随机
中间
结束
开始
中间
随机
结束
开始
中间
随机
中间
结束

我希望正则表达式只匹配粗体行作为单独的组,其中 MIDDLE 出现不止一次:


开始
中间
随机
中间
结束

开始
中间
随机
结束
开始
中间
随机
中间
结束

我试过的是这个和几个变体,但它不符合我需要的组。

(START(?:\nMIDDLE){2,}(?:\nMIDDLE)*\nEND)
(START\*STUFF~(?:\nMIDDLE\*STUFF~){2,}(?:\nMIDDLE\*STUFF~)*\nEND\*STUFF~)
python regex search line
2个回答
1
投票

使用两个表达方式:

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 上的演示.


0
投票

可以匹配正则表达式

^START\n(?:^(?!END\n).*\n)*MIDDLE\n(?:^(?!END\n).*\n)MIDDLE\n(?:.*\n)*?END$

RE.M
.

演示

© www.soinside.com 2019 - 2024. All rights reserved.