Python re.split正则分割时短横线(-)匹配异常原因咨询
正则字符组中短横线位置导致分割异常的原因
问题核心是正则字符组[]对短横线-的解析规则:
- 当
-位于字符组的开头或结尾时,它是普通字面字符,匹配字符串中的-。 - 当
-夹在两个字符之间时,它会被解析为字符范围运算符,匹配两个字符ASCII码区间内的所有字符,而非字面的-。
案例拆解
正常分割的场景
代码:import re operations = '8-8/84' operations = re.split(r'([+,*,/,-])', operations)这里
-在字符组末尾,被当作字面字符,因此能匹配字符串中的-和/,分割结果为:['8', '-', '8', '/', '84']。匹配异常的场景
代码:import re operations = '8-8/84' operations = re.split(r'([+,*,-,/])', operations)这里
-夹在*和,之间,被解析为ASCII码从*(42)到,(44)的字符范围,该范围包含*、+、,,但不包含字面的-。因此正则只会把/当作分隔符,不会分割8-8,最终结果为:['8-8', '/', '84']。
修复方案
要让-被当作字面字符匹配,两种可行方式:
- 将
-移到字符组的开头或结尾,比如r'([-,+,*,/])'或r'([+,*,/,-])'。 - 对
-转义,用\-表示字面短横线,比如r'([+,*,\-/,])'(注:/无需转义,转义也不影响功能)。
内容的提问来源于stack exchange,提问作者eye egg
相关产品推荐
相关产品推荐

