Python 正则表达式提取数字之间的段落文本

Python Regex extract paragraph text between number

提问人:user1753640 提问时间:11/16/2023 更新时间:11/16/2023 访问量:52

问:

我有如下文本,我只想提取文本

1. foobar

2. foo

3. bar

结果应为 。[foobar, foo, bar]

什么python正则表达式会提取我想要的结果?我尝试了以下方法,但没有运气

r'\d+.*?(?=\d|$)'

Python 正则表达式

评论


答:

1赞 The fourth bird 11/16/2023 #1

您可以锚定字符串、转义点并在其后匹配可选空格。 然后,您可以捕获当前行的其余部分,然后继续匹配所有不以数字和点开头的行。

要获取这些值,您可以使用 re.findall,它将返回捕获组的值。

^\d+\.[^\S\n]*(.*(?:\n(?!\d+\.).*)*)

仅单行:

^\d+\.[^\S\n]*(.*)

正则表达式演示 |Python 演示

如果你不想要尾随换行符,你可以去掉它们:

import re

pattern = r"^\d+\.[^\S\n]*(.*(?:\n(?!\d+\.).*)*)"
s = ("1. foobar\n\n"
     "2. foo\n\n"
     "3. bar\ntest\n\n")

print([x.strip() for x in re.findall(pattern, s, re.M)])

输出

['foobar', 'foo', 'bar\ntest']
1赞 Daniel Zin 11/16/2023 #2
import re

text="""1. foobar

2. foo
 
3. bar"""

matcher=re.compile(r'\d+\.\s+(\w+)')
result=matcher.findall(text)     # result is ['foobar', 'foo', 'bar']

python 文档的解释: 如果正则表达式中只有一个捕获组,则 findall 将返回与该组匹配的字符串列表。