Python使用正则表达式匹配min、s、km格式时间里程字符串问题
正确正则表达式及实现
你原来的正则存在多处语法错误:
- 把固定字符串
min、s、km错误写在了量词花括号里,\w{min}属于完全错误的语法,固定匹配的普通字符串直接书写即可 - 没有处理空格可选的规则,也没有适配小数点/逗号的两种情况
- 距离部分的数字位数规则匹配错误
正确的正则写法如下:r'\d{1,2}min\s*\d{1,2}s\s*\d{1,3}[.,]\d{1,2}km'
规则匹配说明
\d{1,2}min:匹配1-2位数字+固定字符串min\s*:匹配0个或多个空格,满足空格可选的要求\d{1,2}s:匹配1-2位数字+固定字符串s\d{1,3}[.,]\d{1,2}km:匹配1-3位数字+点/逗号+1-2位数字+固定字符串km,适配点和逗号两种场景
如果需要和你原有代码逻辑一致,通过group(1)获取匹配结果,把正则整体包裹为捕获组即可:
import re item = re.search(r'(\d{1,2}min\s*\d{1,2}s\s*\d{1,3}[.,]\d{1,2}km)', img1).group(1)
可直接覆盖所有符合规则的场景,测试用例验证:
test_cases = [ "22min 7s 11.2km", # 原始样例 "22min7s11,2km", # 无空格、逗号代替点 "5min 23s 123.45km", # 最长位数场景 "9min3s 2.1km" # 混合有无空格 ] for text in test_cases: match = re.search(r'(\d{1,2}min\s*\d{1,2}s\s*\d{1,3}[.,]\d{1,2}km)', text) if match: print(match.group(1))
内容的提问来源于stack exchange,提问作者laosnd
相关产品推荐
相关产品推荐

