首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从字符串-python中提取年龄

从字符串-python中提取年龄
EN

Stack Overflow用户
提问于 2019-06-12 10:09:45
回答 1查看 767关注 0票数 4

考虑一下这条字符串:

代码语言:javascript
复制
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+)。

当前尝试:

代码语言:javascript
复制
import re
re.findall(r'(?:A|A |AA F|M)(\d+-\d+)',s)

输出:

代码语言:javascript
复制
['25-54', '21-54', '25-49', '21-49'] #doesnot capture the last group A 21+

预期产出:

代码语言:javascript
复制
['A25-54','AA F21-54','A25-49','M21-49','A 21+']

正如您所看到的,我也希望有最后一个组,即A 21+,它目前在我的输出中缺失。

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

感谢任何我能得到的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-12 11:30:10

匹配的缺失部分是由于模式包含一个捕获组,一旦正则表达式中有一个捕获组,re.findall只返回这些部分。第二个问题是,在匹配第一个或多个数字之后,您应该匹配-后面的一个或多个数字,或者匹配一个文字+符号。

你可以用

代码语言:javascript
复制
(?:A|A |AA F|M)\d+(?:-\d+|\+)

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

regex演示正则图

详细信息

  • (?:A|A |AA F|M) -非捕获组匹配AAAAAA FM
  • \d+ - 1+数字
  • (?:-\d+|\+) -非捕获组匹配-和1+数字后,或一个单一的+符号.

Python演示

代码语言:javascript
复制
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+']
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56559625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档