如何按任意数字后接英文句号的规则分割字符串而非使用固定分隔符
字符串分割实现方案
实现思路
该场景属于动态分隔符分割,且需要保留分隔符在分割后的子串头部,最优方案是使用正则的零宽正向先行断言实现,不需要硬编码序号范围,也不会丢失分割标记字符。
代码实现(Python)
import re input_str = "1.Adam-Lee-Dotnet-9191919191-AdamLee@gmail.com-London-UK-Oracle-Banking2.Peter-Smith-Salesforce-9222291910-PeterSmith21@gmail.com-Mumbai-INDIA-Oracle-Engineering3.Harrison-Lu-Java-9223391910-HarrisonLu@gmail.com-Mumbai-INDIA-Samsung-Engineering4.Andrew-Joseph-Javascript-9200091910-AndrewJoseph@gmail.com-Toronto-CANADA-Dell-Engineering5.Larry-Ken-SQL-8880091910-LarryKen@gmail.com-Newyork-USA-HP-Management" # 核心分割逻辑 result = re.split(r'(?=\d+\.)', input_str)
执行后得到的result就是你期望的列表结构。
如果是JavaScript场景,写法逻辑一致:
const result = inputStr.split(/(?=\d+\.)/)
原理解释
- 正则规则
(?=\d+\.)是零宽断言,仅匹配「后续紧跟1个或多个数字+英文句号」的空位置,不会消耗匹配到的数字和句号字符 - 按该规则分割时,会自动在每个「数字+句号」组合的前方切断字符串,得到的子串天然保留开头的序号和句号,不需要额外拼接处理
- 适配任意长度的数字序号,不需要手动限定序号范围,灵活性远高于硬编码序号范围的写法
原有写法问题说明
普通split方法的分隔符会被直接丢弃,无法保留在结果中,同时硬编码序号范围的写法扩展性极差,序号超过你预设的范围就会完全失效。
内容的提问来源于stack exchange,提问作者vjVik
相关产品推荐
相关产品推荐

