将两个单词之间的任何内容按集合进行匹配。

2024-10-04 11:35:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在两个特定的单词开始和结束之间匹配任何文本或任何东西。你知道吗

    START
    aba
    asds
    asdsa 
    END

    NOTREQUIRED

    START
    fdfdfsds
    ssdsds
    sdsds
    END

    START
    aba
    asds
    asdsa 
    END

    NOTREQUIRED

    START
    fdfdfsds
    ssdsds
    sdsds
    END

我已经写了这样的规则

    START[\s\S]END 

问题是它是从文档中开始的第一个单词到结束的最后一个单词的匹配。你知道吗

然后我改成了规则

    START(.*?)END

现在只和第一盘比赛。你知道吗

我想匹配第一次出现的START和第一次出现的word END,以及第二次出现的word START和第二次出现的word END,依此类推。 如何编写我的注册规则。我尝试了本stack over flow thread中提到的几个规则,但无法满足我的需要。你知道吗

请给我建议。你知道吗


Tags: 文档文本stack规则单词startwordend
2条回答

只需将re.findallre.S标志一起使用即可。re.S使.字符匹配包括换行符在内的每个字符。你知道吗

演示:

>>> text = """START
...     aba
...     asds
...     asdsa 
...     END
... 
...     NOTREQUIRED
... 
...     START
...     fdfdfsds
...     ssdsds
...     sdsds
...     END
... 
...     START
...     aba
...     asds
...     asdsa 
...     END
... 
...     NOTREQUIRED
... 
...     START
...     fdfdfsds
...     ssdsds
...     sdsds
...     END"""
>>> re.findall('START(.*?)END', text, re.S)
['\n    aba\n    asds\n    asdsa \n    ', '\n    fdfdfsds\n    ssdsds\n    sdsds\n    ', '\n    aba\n    asds\n    asdsa \n    ', '\n    fdfdfsds\n    ssdsds\n    sdsds\n    ']
>>> for i in re.findall('START(.*?)END', text, re.S): print i
... 

    aba
    asds
    asdsa 


    fdfdfsds
    ssdsds
    sdsds


    aba
    asds
    asdsa 


    fdfdfsds
    ssdsds
    sdsds

你的正则表达式工作得非常好,你只需要应用它很多次。这可以使用^{}完成:

preg = re.compile(r'START(.*?)END', re.DOTALL)

for match in preg.finditer(text):
    print(match.group(1).strip() + '\n')

相关问题 更多 >