如何在小写字母后接大写字母处拆分文本且保留小写字母?
连写国家名称的拆分方案
你遇到的问题是用正则拆分连写的英文名称时丢失了每个单词的最后一个字符,核心原因是原正则把小写字母当作分隔符并移除了。
错误原因分析
原代码中的正则re.split('[a-z](?=[A-Z])', text),是匹配「小写字母+后面紧跟大写字母」的组合,然后以这个小写字母作为拆分标记,拆分时会把该小写字母去掉,所以才会出现German(少了字母y)、Englan(少了字母d)的情况。
正确的正则写法
要避免丢失字符,需要用零宽断言定位拆分位置,而非消耗字符。使用(?<=[a-z])(?=[A-Z])作为拆分规则:
(?<=[a-z]):反向零宽断言,确认当前位置的前一个字符是小写字母(?=[A-Z]):正向零宽断言,确认当前位置的后一个字符是大写字母
这个正则会精准定位在小写字母与大写字母的分界处拆分,不会移除任何字符。
代码示例
处理纯连写的字符串:
import re text = "GermanyEnglandSpain" result = re.split('(?<=[a-z])(?=[A-Z])', text) print(result) # 输出: ['Germany', 'England', 'Spain']
处理带空格的字符串:
text = "CanadaUnited States" result = re.split('(?<=[a-z])(?=[A-Z])', text) print(result) # 输出: ['Canada', 'United States']
内容的提问来源于stack exchange,提问作者EyalG
相关产品推荐
相关产品推荐

