使用正则表达式提取指定字符串中括号内的年龄数值
问题说明
现有目标字符串片段:
year="Year Of Birth (Age): 1953 (68)"
需要提取(Age)标识后跟随的括号内的年龄数字。原有尝试的正则存在语法错误,无法匹配到结果。
原有正则问题
你编写的正则r'(Age):\s[0-9][0-9][0-9][0-9]\s\(([0-9[0-9])'存在两个明显问题:
- 年龄匹配的字符组多写了一个左方括号,
[0-9[0-9]属于语法错误 - 硬编码年份为4位、年龄为2位,适配性差,遇到百岁老人3位年龄、或者格式里空格数量变化的场景就会失效
正确实现方案
方案1:使用findall匹配所有符合规则的年龄
import re year = "Year Of Birth (Age): 1953 (68)" age_list = re.findall(r'\(Age\):\s*\d+\s*\((\d+)\)', year) # 匹配到结果后取第一个元素就是年龄字符串,示例中得到['68'] if age_list: age = age_list[0]
方案2:使用search匹配第一个符合规则的年龄(效率更高)
import re year = "Year Of Birth (Age): 1953 (68)" match_res = re.search(r'\(Age\):\s*\d+\s*\((\d+)\)', year) if match_res: age = match_res.group(1)
正则规则说明
\(Age\):转义匹配字面量字符(Age):\s*:匹配冒号加任意数量的空白字符,适配不同空格长度的格式\d+:匹配任意长度的出生年份数字,不用硬编码位数\s*\(:匹配任意空白加左括号(\d+):唯一捕获组,匹配括号内的年龄数字,支持1/2/3位年龄的场景\):匹配右侧的右括号
内容的提问来源于stack exchange,提问作者Neeraj Desai
相关产品推荐
相关产品推荐

