You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:57:18