考虑以下字符串:
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'
,我想是因为?:
。你知道吗
谢谢你的帮助。你知道吗
缺少匹配的部分是因为您的模式包含一个捕获组,并且一旦正则表达式中有一个捕获组,
re.findall
只返回该部分。第二个问题是,您应该匹配-
后跟一个或多个数字或匹配前一个或多个数字后的文字+
符号。你知道吗你可以用
注意:您可能希望在开始处添加一个单词边界,以便只匹配那些
A
、AA F
等作为整个单词:r'\b(?:A|A |AA F|M)\d+(?:-\d+|\+)'
。你知道吗参见regex demo和regex graph:
细节
(?:A|A |AA F|M)
-匹配A
、A
、AA
、AA F
或M
的非捕获群\d+
-1+位(?:-\d+|\+)
—匹配-
和后面1+个数字或单个+
符号的非捕获组。你知道吗Python demo:
相关问题 更多 >
编程相关推荐