我想提取数字之间的文本。例如,如果有如下文本
1964 ORDINARY shares
EXECUTORS OF JOANNA C RICHARDSON
100 ORDINARY shares
TG MARTIN
C MARTIN
7500 ORDINARY shares
ARCO LIMITED
我想产生一个3个元素的列表,其中每个元素是数字之间的文本,包括第一个数字,但没有结束数字,以及列表中没有结束数字的最后一个元素
[
'1964 ORDINARY shares \nEXECUTORS OF JOANNA C RICHARDSON',
'100 ORDINARY shares \nTG MARTIN\nC MARTIN\n',
'7500 ORDINARY shares\nARCO LIMITED'
]
我试过这么做
regex = r'\d(.+?)\d
re.findall(regex, a, re.DOTALL)
但它又回来了
['9',
' ORDINARY shares\nEXECUTORS OF JOANNA C RICHARDSON\n',
'0 ORDINARY shares\nTG MARTIN\nC MARTIN\n',
'0']
2条答案
按热度按时间qcbq4gxm1#
你可以使用下面的代码来实现这一点。
uidvcgyl2#
模式
\d(.+?)\d
匹配至少3个字符,其中外部2个数字匹配,内部部分在组1中捕获(其中(.+?)
匹配至少1个字符)您会得到这些结果是因为您正在使用带有re.findall的捕获组,它返回捕获组的值。
例如,在
1964
中,您匹配196
,其中9
在组1中捕获,并且这是结果中的第一个值。markalex有一个被否决和删除的答案,Michael Butscher有一个注解,它们包含一个键,可以使用一个没有
re.DOTALL
和一个非贪婪量词的模式。说明
\b\d+\b
匹配字边界之间的1+位,以防止部分字匹配\D*
匹配除数字以外的可选字符,包括换行符Regex demo|Python demo
如果匹配应该从字符串的开头开始,并且后面跟着一个空格字符,那么您也可以考虑对多行使用带有
re.M
的锚。Regex demo|Pyton demo