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

neskvpey  于 12个月前  发布在  Python
关注(0)|答案(2)|浏览(96)

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

1. foobar

2. foo

3. bar

字符串
结果应该是[foobar, foo, bar]
什么python正则表达式将提取我想要的结果?我尝试了以下方法,但没有运气
r'\d+.*?(?=\d|$)'

ndasle7k

ndasle7k1#

您可以锚字符串,转义点并匹配它后面的可选空格。然后您可以捕获当前行的其余部分,然后继续匹配所有不以数字和点开头的行。
要获取这些值,您可以使用re.findall,它将返回捕获组的值。

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

字符串
对于单线:

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


Regex demo|Python demo
如果你不想要结尾的换行符,你可以去掉它们:

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']

zrfyljdw

zrfyljdw2#

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返回匹配该组的字符串列表。

相关问题