正则表达式匹配求助:从"10K-50K"提取数字返回Nonetype
解决正则匹配"10K-50K"提取数字的问题
嘿,我来帮你搞定这个小问题~你遇到的NoneType结果,核心原因是你的正则表达式里的[\d]只能匹配单个数字,但目标字符串里的10和50都是两位数字,所以自然匹配不上啦。
修正后的正则表达式
我们只需要把匹配数字的部分改成\d+(+表示匹配前面的元素至少一次,也就是可以匹配1位或多位数字),就能正确捕获目标数字了。这里有两种常用的写法:
针对固定"K"的场景
如果你的字符串后缀固定是K,可以写得更精准:
import re data = "10K-50K" data1 = re.match(r'(\d+)K-(\d+)K', data) if data1: print(data1.group(1)) # 输出:10 print(data1.group(2)) # 输出:50
通用字母后缀的场景
如果后缀可能是其他大写字母(比如M、G),可以把K换成[A-Z]:
import re data = "10K-50K" data1 = re.match(r'(\d+)[A-Z]-(\d+)[A-Z]', data) if data1: print(data1.group(1)) # 输出:10 print(data1.group(2)) # 输出:50
关键知识点解释
\d+:匹配一个或多个阿拉伯数字,完美覆盖1位、两位甚至更多位数的数字场景():正则中的捕获分组,把我们需要提取的数字包裹起来,之后通过group(n)就能获取第n个分组的内容re.match:它会从字符串的开头开始匹配,你的目标字符串正好符合开头就匹配的格式,所以完全适用;如果需要在更长的文本中查找这种格式,改用re.search会更合适哦。
内容的提问来源于stack exchange,提问作者Osito Wang
相关产品推荐
相关产品推荐

