Python re.split参数运行效果与教程描述不符,是什么原因?
问题原因
你遇到的None值是因为正则表达式里只给减号加了捕获组,Python的re.split规则是:如果正则中包含捕获组,那么所有捕获组匹配到的内容也会被插入到结果列表中;如果某个分割符匹配时,对应的捕获组没有命中,就会在对应位置返回None。
你的正则r"[\^]|([-])|[+]"实际是三个分支的或逻辑:
- 匹配
^:此时捕获组([-])没有匹配到内容,所以分割后插入None - 匹配
-:捕获组命中,分割后插入匹配到的- - 匹配
+:此时捕获组([-])没有匹配到内容,所以分割后插入None
对应你的字符串3x^2+2x-1的分割顺序:
- 用
^分割3x和2,插入捕获组的None → 得到['3x', None, '2'] - 接下来用
+分割2和2x,插入捕获组的None → 列表变成['3x', None, '2', None, '2x'] - 最后用
-分割2x和1,插入捕获组的-→ 最终得到你看到的['3x', None, '2', None, '2x', '-', '1']
解决方案
如果你想要保留所有运算符号,同时不要None值,直接给所有分割符都加上同一个捕获组即可:
import re x="3x^2+2x-1" x=re.split(r"([\^+\-])", x) print(x) # 输出:['3x', '^', '2', '+', '2x', '-', '1']
如果你不需要保留^和+,只需要保留-且去掉None,对结果做过滤即可:
import re x="3x^2+2x-1" x=re.split(r"[\^]|([-])|[+]", x) x = [i for i in x if i is not None] print(x) # 输出:['3x', '2', '2x', '-', '1']
内容的提问来源于stack exchange,提问作者Cubedey
相关产品推荐
相关产品推荐

