如何在字符串中间的指定字符处分割字符串?(含示例与异常情况)
解决字符串中间分隔符的分割问题
你遇到的问题根源在于,你用的正则表达式\w-会匹配一个单词字符+连字符的组合,split操作会把这个匹配到的完整片段从原字符串中移除,导致前面的子串丢失了最后一个字符。比如在'-1232-1412'里,\w-匹配的是'2-',移除后就剩下了'-123'和'1412'。
要实现你的需求——在字符串中间的连字符处分割,同时完整保留分隔符前后的内容——可以用零宽后顾断言来精准定位分割位置,不会消耗任何需要保留的字符。
解决方案代码示例
import re string_1 = '-1232-1412' string_2 = '1234-1243' # 匹配前面是数字的连字符位置,执行分割 output_string_1 = re.split(r'(?<=\d)-', string_1) output_string_2 = re.split(r'(?<=\d)-', string_2) print(output_string_1) # 输出: ['-1232', '1412'] print(output_string_2) # 输出: ['1234', '1243']
正则逻辑解释
正则(?<=\d)-的具体含义:
(?<=\d):这是正向零宽后顾断言,表示分割位置的前面必须是一个数字(\d),但这个数字不会被纳入匹配结果,也不会被split操作移除。-:明确指定要作为分割点的目标字符,也就是字符串中间的连字符。
这样操作后,只会在“前面是数字的连字符”位置分割,完美保留了连字符前后的完整子串,不管第一个子串是否以负号开头。
如果你的场景中,分隔符前面的字符不一定是数字,而是任意非连字符的字符,可以把\d替换成[^-],正则改成(?<=[^-])-,就能匹配所有“前面不是连字符的连字符”位置,适配更通用的场景。
内容的提问来源于stack exchange,提问作者Oussama Jabri
相关产品推荐
相关产品推荐

