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

