[英]Get last part after number regex python
我之间总是有 2 个数字,我想提取 3 之前的所有内容,所以Salvatore
和 2 Abdulla
之后的所有内容例如我有以下内容:
txt = "Salvatore32Abdulla"
first = re.findall("^\D+", txt)
last = re.search(,txt)
预期结果:
first = 'Salvatore'
last = 'Abdulla'
我可以得到第一部分,但在 2 之后我无法得到last
一部分
您也可以通过稍微更改@ctwheels 建议的解决方案来在一行中执行此操作,如下所示。 我建议您使用re.findall
,因为它只需一击即可完成工作。
import re
txt = "Salvatore32Abdulla"
非数字部分的单行提取。
first, last = re.findall("\D+", txt)
print((first, last))
('Salvatore', 'Abdulla')
如果您(出于某种原因)还想跟踪两者之间的数字:
first, num, last = re.findall("(\D+)(\d{2})(\D+)", txt)
print((first, num, last))
('Salvatore', '32', 'Abdulla')
作为选项 2的扩展并考虑具有'Salvatore####...###Abdulla'
形式的文本,其中####...###
表示分隔非数字部分,您可能不知道中间有多少位数字,您可以使用以下内容:
first, num, last = re.findall("(\D+)(\d*)(\D+)", txt)
print((first, num, last))
('Salvatore', '32', 'Abdulla')
您目前的正则表达式有一个问题,您的代码有一个问题。
您的正则表达式包含^
,它将其锚定到字符串的开头。 这只会让你匹配Salvatore
。 您正在使用findall
(如果您将正则表达式更改为简单的\D+
,这是适当的选择),但现在它只得到一个结果。
不需要第二个re.search
调用,因为您可以在给定适当模式的情况下使用findall
捕获第一个和最后一个(见下文)。
import re
txt = "Salvatore32Abdulla"
x = re.findall("\D+", txt)
print(x)
结果:
['Salvatore', 'Abdulla']
你可以使用这样的正则表达式:
txt = "Salvatore32Abdulla"
regex = r"(\D+)\d\d(\D+)"
match = re.match(regex, txt)
first = match.group(1)
last = match.group(2)
最后一位之后的部分:
match = re.search(r'\D+$',txt)
if match:
print(match.group())
结果: Abdulla
解释
--------------------------------------------------------------------------------
\D+ non-digits (all but 0-9) (1 or more times
(matching the most amount possible))
--------------------------------------------------------------------------------
$ before an optional \n, and the end of the
string
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.