繁体   English   中英

在数字正则表达式 python 之后获取最后一部分

[英]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"

选项1

非数字部分的单行提取。

first, last = re.findall("\D+", txt)
print((first, last))
('Salvatore', 'Abdulla')

选项 2

如果您(出于某种原因)还想跟踪两者之间的数字:

first, num, last = re.findall("(\D+)(\d{2})(\D+)", txt)
print((first, num, last))
('Salvatore', '32', 'Abdulla')

选项 3

作为选项 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())

Python 证明| 正则表达式证明

结果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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM