我想提取数字之间的文本。例如,如果有如下的文本
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 MARTINnC MARTINn',
'7500 ORDINARY sharesnARCO LIMITED'
]
I tried doing this
regex = r'd(.+?)d
re.findall(regex, a, re.DOTALL)
返回
['9',
' ORDINARY sharesnEXECUTORS OF JOANNA C RICHARDSONn',
'0 ORDINARY sharesnTG MARTINnC MARTINn',
'0']
您可以使用下面的代码来实现这一点。
import re
text = """1964 ORDINARY shares
EXECUTORS OF JOANNA C RICHARDSON
100 ORDINARY shares
TG MARTIN
C MARTIN
7500 ORDINARY shares
ARCO LIMITED"""
# Use regex to find the text between digits
pattern = r'd+.*?(?=d|$)'
matches = re.findall(pattern, text, flags=re.DOTALL)
print(matches)
模式d(.+?)d
匹配至少3个字符,其中外部2位数字匹配,并且在组1中捕获内部部分(其中(.+?)
匹配至少1个字符)
您得到这些结果是因为您使用了带有re.findall的捕获组,它返回捕获组的值。
因此,例如在1964
中,您匹配196
,其中9
在第1组中捕获,这是结果中的第一个值。
有一个被markalex和Michael Butscher拒绝和删除的回答和评论,持有一个键来使用没有re.DOTALL
和非贪婪量词的模式。
bd+bD*
bd+b
在单词边界之间匹配1+数字以防止部分单词匹配D*
匹配非数字的可选字符,包括换行符
Regex demo | Python demo
如果匹配应该从字符串的开头开始,后面跟着一个空白字符,您还可以考虑对多行
使用re.M
锚。^d+sD*
Regex demo | Pyton demo