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

Python正则表达式提取最后括号内两个浮点数问题求助

问题

输入字符串:

(0,0)-(1.5,1.5)-(3.0,4.5)-(4.5,6.0)-(6.0,7.5)-(9.0,10.5)-(12.57,100.356)

需求:提取最后一个括号内的两个浮点数12.57, 100.356。

尝试的代码:

import re

str_path_finder = re.compile(r'.*\-(d+\.d+,d+\.d+)')
rst = str_path_finder.search("(0,0)-(1.5,1.5)-(3.0,4.5)-(4.5,6.0)-(6.0,7.5)-(9.0,10.5)-(12.57,100.356)")

返回rst为None,需要修正正则表达式。

错误分析

你的正则存在三个核心问题:

  • 数字匹配元字符写错:应该用\d表示数字,而非直接写d;
  • 未匹配括号:目标浮点数被()包裹,正则完全没处理这部分结构;
  • 匹配逻辑不严谨:没有锚定字符串结尾,也没考虑逗号后可能存在的空格,无法精准定位最后一组内容。

正确实现

方案1:精准匹配目标格式

使用以下正则可准确捕获最后一组括号内的浮点数:

import re

pattern = re.compile(r'.*-\((\d+\.\d+,\s?\d+\.\d+)\)$')
text = "(0,0)-(1.5,1.5)-(3.0,4.5)-(4.5,6.0)-(6.0,7.5)-(9.0,10.5)-(12.57,100.356)"
rst = pattern.search(text)

if rst:
    result = rst.group(1)
    print(result)  # 输出:12.57,100.356
    # 拆分并转为浮点数
    num1, num2 = result.split(',')
    print(float(num1.strip()), float(num2.strip()))  # 输出:12.57 100.356

正则各部分说明:

  • .*-:贪婪匹配所有字符直到最后一个减号;
  • \(:匹配左括号(括号是正则元字符,需转义);
  • (\d+\.\d+,\s?\d+\.\d+):捕获组,匹配两个带小数的浮点数,支持逗号后带可选空格;
  • \):匹配右括号;
  • $:锚定字符串结尾,确保匹配的是最后一组内容。

方案2:通用浮点数匹配(兼容整数、负号等)

如果需要支持更复杂的浮点数格式(比如整数12、负数-3.14、无整数部分的.5),可使用更灵活的正则:

pattern = re.compile(r'.*-\(([-+]?\d*\.?\d+,[-+]?\s?\d*\.?\d+)\)$')

简化替代方法

如果不想用正则,也可以通过字符串拆分快速实现:

text = "(0,0)-(1.5,1.5)-(3.0,4.5)-(4.5,6.0)-(6.0,7.5)-(9.0,10.5)-(12.57,100.356)"
last_part = text.split('-')[-1].strip('()')
num1, num2 = last_part.split(',')
print(float(num1.strip()), float(num2.strip()))  # 输出:12.57 100.356

内容的提问来源于stack exchange,提问作者sunxd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:05:46