我有如下文字,我想提取只是文本
1. foobar 2. foo 3. bar
字符串结果应该是[foobar, foo, bar]。什么python正则表达式将提取我想要的结果?我尝试了以下方法,但没有运气r'\d+.*?(?=\d|$)'个
[foobar, foo, bar]
r'\d+.*?(?=\d|$)'
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']
型
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返回匹配该组的字符串列表。
2条答案
按热度按时间ndasle7k1#
您可以锚字符串,转义点并匹配它后面的可选空格。然后您可以捕获当前行的其余部分,然后继续匹配所有不以数字和点开头的行。
要获取这些值,您可以使用re.findall,它将返回捕获组的值。
字符串
对于单线:
型
Regex demo|Python demo的
如果你不想要结尾的换行符,你可以去掉它们:
型
输出
型
zrfyljdw2#
字符串
来自python文档的解释:如果正则表达式中只有一个捕获组,则findall返回匹配该组的字符串列表。