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
相关产品推荐
相关产品推荐

