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

如何在字符串中间的指定字符处分割字符串?(含示例与异常情况)

解决字符串中间分隔符的分割问题

你遇到的问题根源在于,你用的正则表达式\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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:12:33