获取数字正则表达式 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部分

您可以使用这样的正则表达式:

txt = "Salvatore32Abdulla"
regex = r"(\D+)\d\d(\D+)"

match = re.match(regex, txt)
first = match.group(1)
last = match.group(2)

为什么我没有得到预期的结果?

您目前有一个问题与您的正则表达式有关,另一个与您的代码有关。

您的正则表达式包含 ^,它将其锚定到字符串的开头。这将只允许您匹配 Salvatore。您正在使用 findall(如果您将正则表达式简单地更改为 \D+,这是合适的选择),但现在它只得到一个结果。

不需要第二个 re.search 调用,因为您可以使用 findall 捕获 firstlast给出适当的模式(见下文)。


我该如何解决?

See code in use here

import re
txt = "Salvatore32Abdulla"
x = re.findall("\D+", txt)
print(x)

结果:

['Salvatore', 'Abdulla']

您也可以通过稍微更改 @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

作为 Option-2 的扩展并考虑具有 'Salvatore####...###Abdulla' 形式的文本,其中 ####...### 表示分隔非的连续数字块-数字部分,你可能不知道也可能不知道中间有多少数字,你可以使用以下内容:

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

最后一位后的部分:

match = re.search(r'\D+$',txt)
if match:
    print(match.group())

Python proof | regex proof

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