在python中使用多个regex提取特定文本?

2024-09-26 17:55:44 发布

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

我在Python3中使用正则表达式时遇到了一个问题,因此如果有人能帮助我,我将非常高兴。我有一个类似下面的文本文件:

Header A
text text
text text
Header B
text text
text text
Header C
text text
here is the end

我想做的是在标题之间有一个文本列表,但包括标题本身。 我使用这个正则表达式:

^{pr2}$

结果就在这里

['Header A\ntext text\n text text\n Header', 'Header B\ntext text\n text text\n Header', 'Header C\n text text here is the end']

问题是我在列表中每一项的末尾都有下一个标题。正如您所看到的,当我们找到下一个标头时,每个标头都结束,但最后一个标头没有以特定的方式结束

有没有一种方法可以使用正则表达式获取每个头的列表(而不是元组),其中包括作为子字符串的自己的文本?在


Tags: thetext文本标题列表hereispython3
3条回答

实际上,您需要使用积极的前瞻性断言。在

>>> s = '''Header A
text text
text text
Header B
text text
text text
Header C
text text
here is the end'''
>>> re.findall(r'Header.*?(?=Header)|Header.*?end',s, re.DOTALL)
['Header A\ntext text\ntext text\n', 'Header B\ntext text\ntext text\n', 'Header C\ntext text\nhere is the end']

在正向展望中包含\n,这样就不会在每个项目的最后一个字符中得到\n字符。在

^{pr2}$

根据字符串Header前面的新行拆分输入。在

>>> re.split(r'\n(?=Header\b)', s)
['Header A\ntext text\ntext text', 'Header B\ntext text\ntext text', 'Header C\ntext text\nhere is the end']
Header [^\n]*[\s\S]*?(?=Header|$)

试试看这个。看到了吗演示。在

https://regex101.com/r/iS6jF6/21

^{pr2}$

怎么样:

re.findall(r'(?=(Header.*?)(?=Header|end))',data, re.DOTALL)

相关问题 更多 >

    热门问题