使用re.match提取字符串第二个数字返回NoneType的问题求助
问题分析与解决方案
你的问题出在**re.match()的匹配规则上——这个方法只会从字符串的最开头**开始尝试匹配,而第二个数字的正则表达式是针对"x "之后的内容,不在字符串起始位置,所以re.match()根本找不到匹配项,自然返回None,调用group(1)就会报错啦。
修正方案1:用re.search()替代re.match()
re.search()会在整个字符串范围内搜索匹配的内容,而不是只看开头,修改代码如下:
import re field = "1400 x 3524" # 提取第一个数字 num1 = re.search(r"(\d{3,4})(?= x)", field).group(1) # 提取第二个数字 num2 = re.search(r"(?<=x )(\d{3,4})", field).group(1) # 执行乘法运算 print(int(num1) * int(num2))
更优方案2:一次匹配两个数字
其实没必要写两次正则,我们可以直接用一个正则表达式同时捕获两个数字,代码更简洁高效,还能避免重复操作:
import re field = "1400 x 3524" # 一次匹配两个数字 match_result = re.search(r"(\d{3,4}) x (\d{3,4})", field) if match_result: num1 = int(match_result.group(1)) num2 = int(match_result.group(2)) print(num1 * num2)
额外优化建议
如果你的数字位数不一定是3-4位,可以把正则里的\d{3,4}改成\d+,这样能匹配任意位数的正整数,适用性更广。
内容的提问来源于stack exchange,提问作者milka1117
相关产品推荐
相关产品推荐

