从字符串中提取年龄

2024-06-01 08:36:28 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑以下字符串:

s="""A25-54 plus affinities targeting,Demo (AA F21-54),
A25-49 Artist Affinity Targeting,M21-49 plus,plus plus A 21+ targeting"""

我希望修复我的模式,该模式当前无法提取字符串中的所有年龄组(当前输出中缺少A 21+)。你知道吗

当前尝试:

import re
re.findall(r'(?:A|A |AA F|M)(\d+-\d+)',s)

输出:

['25-54', '21-54', '25-49', '21-49'] #doesnot capture the last group A 21+

预期产量:

['A25-54','AA F21-54','A25-49','M21-49','A 21+']

如您所见,我也希望最后一个组是A 21+,它当前在我的输出中丢失。你知道吗

如果我能得到与捕获组相关联的字符串。目前,我的输出除了没有捕获所有组之外,没有年龄组之前的字符串。例:我想要'A25-54而不是'25-54',我想是因为?:。你知道吗

谢谢你的帮助。你知道吗


Tags: 字符串reartistdemo模式plusaaaffinity
1条回答
网友
1楼 · 发布于 2024-06-01 08:36:28

缺少匹配的部分是因为您的模式包含一个捕获组,并且一旦正则表达式中有一个捕获组,re.findall只返回该部分。第二个问题是,您应该匹配-后跟一个或多个数字匹配前一个或多个数字后的文字+符号。你知道吗

你可以用

(?:A|A |AA F|M)\d+(?:-\d+|\+)

注意:您可能希望在开始处添加一个单词边界,以便只匹配那些AAA F等作为整个单词:r'\b(?:A|A |AA F|M)\d+(?:-\d+|\+)'。你知道吗

参见regex demoregex graph

enter image description here

细节

  • (?:A|A |AA F|M)-匹配AA AA AA FM的非捕获群
  • \d+-1+位
  • (?:-\d+|\+)—匹配-和后面1+个数字或单个+符号的非捕获组。你知道吗

Python demo

import re
s="""A25-54 plus affinities targeting,Demo (AA F21-54),
A25-49 Artist Affinity Targeting,M21-49 plus,plus plus A 21+ targeting"""
print(re.findall(r'(?:A|A |AA F|M)\d+(?:-\d+|\+)',s))
# => ['A25-54', 'AA F21-54', 'A25-49', 'M21-49', 'A 21+']

相关问题 更多 >