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

Python re.split截取@后小数的字符串前半段,遇lookbehind错误求解

用re.split实现需求的解决方案

你遇到的问题是Python标准库re不支持可变长度的正向肯定后发断言((?<=...)),因为断言内的[0-9]+长度不固定,所以触发了报错。不过确实可以用re.split实现你的需求,核心是用\K重置匹配位置,规避lookbehind的长度限制。

实现代码

import re

myString1 = 'random text @2.25 possibly more text'
myString2 = 'random text @-1.50 possibly more text'
myString3 = 'random text @-.50'

# 匹配@后跟有效十进制数,之后的内容作为分隔符
pattern = r'@-?\d*\.\d+\K.*'

result1 = re.split(pattern, myString1)[0]
result2 = re.split(pattern, myString2)[0]
result3 = re.split(pattern, myString3)[0]

print(f"1: '{result1}'")
print(f"2: '{result2}'")
print(f"3: '{result3}'")

正则表达式解释

  • @-?:匹配@符号,以及可选的负号(覆盖负数场景)
  • \d*:匹配可选的整数部分(覆盖@-.50这种整数部分为空的情况)
  • \.:匹配小数点(转义是因为.在正则中是通配符)
  • \d+:匹配至少一位小数部分(保证是合法的十进制数)
  • \K:重置匹配起点,前面的@和十进制数不会被当作分隔符的一部分
  • .*:匹配十进制数之后的所有内容,作为re.split的分隔符

运行代码后,会输出你期望的结果:

1: 'random text @2.25'
2: 'random text @-1.50'
3: 'random text @-.50'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:00:19