正则表达式入门:如何提取n后为整数或问号的对应值
适配两种场景的正则实现
你原有的正则仅能匹配\w+覆盖的普通字符,无法识别问号场景,只需要调整捕获组规则、补充后续值判断逻辑即可满足需求。
修改后完整代码
import re def get_n_value(line: str): # 锚定n键,捕获组同时支持匹配问号和整数 res = re.search(r'n : (\?|\d+), t : \d+\.\d+', line) if not res: return None val = res.group(1) return None if val == '?' else int(val) # 场景测试 print(get_n_value("n : ?, t : 0.4")) # 输出 None print(get_n_value("n : 3, t : 0.7")) # 输出 3 print(get_n_value("n : 4, t : 0.4")) # 输出 4
核心修改点说明
- 正则捕获组从原来的
(\w+)调整为(\?|\d+):通过|实现二选一匹配,由于?是正则特殊量词,必须加反斜杠转义为\?才能匹配字面量的问号,\d+负责匹配连续的整数字符 - 将原正则开头模糊匹配的
\w替换为固定字符n,避免误匹配其他同格式键值对,提升匹配准确率 - 将原正则匹配小数部分的
\d\.\d+调整为\d+\.\d+,兼容整数部分长度大于1的小数场景(如t : 10.25) - 捕获结果做简单分支判断:捕获到
?时返回None,捕获到数字字符串时转为整型返回,完全匹配预期输出规则
注意:如果你的文本行里键值对的冒号前后空格数不固定,可以把冒号前后的空格替换为
\s*,比如正则改成r'n\s*:\s*(\?|\d+),\s*t\s*:\s*\d+\.\d+',适配更多格式变体。
内容的提问来源于stack exchange,提问作者Maxime Bouhadana
相关产品推荐
相关产品推荐

