Python 3.7 re模块拆分含大写/下划线/连字符的拼接字符串问题
解决字符串拆分问题:去掉分隔符并拆分驼峰式单词
我来帮你搞定这个问题!你现在的代码之所以会留下_和-符号,是因为原正则只是在这些符号旁边插入了空格,但没有把符号本身去掉。咱们调整一下思路,直接把分隔符替换成空格,同时处理驼峰式的大小写拆分,就能得到想要的纯单词结果。
解决方案代码
import re original_str = "person_firstName-Middle" # 第一步:替换分隔符和拆分驼峰 processed_str = re.sub(r'[-_]|(?<=[a-z])(?=[A-Z])', ' ', original_str) # 第二步:转小写(如果有连续空格可以额外处理,这里例子里不需要) final_result = processed_str.lower() print(final_result) # 输出: person first name middle
为什么原代码不行?
你原来的正则r'((?<=[\_\-a-z])[\_\-A-Z]|(?<!\A)[\_\-A-Z](?=[\_\-a-z]))'的逻辑是在特定位置插入空格,但它会把_和-这些符号保留下来,所以才会出现person _first name -middle这种带符号的结果——它只是在符号前后加了空格,并没有删掉符号本身。
新正则的工作原理
咱们用的新正则r'[-_]|(?<=[a-z])(?=[A-Z])'匹配两种需要拆分的场景:
[-_]:直接匹配下划线和连字符,把它们替换成空格,相当于直接删掉分隔符并拆分单词(?<=[a-z])(?=[A-Z]):这是一对零宽断言,匹配「小写字母后面紧跟大写字母」的位置(比如firstName里t和N之间的位置),在这个位置插入空格,就能把驼峰式的单词拆分开
如果你的字符串里可能出现连续的分隔符(比如person__first-name),可以再加一步合并多余空格:
final_result = re.sub(r'\s+', ' ', processed_str).lower().strip()
内容的提问来源于stack exchange,提问作者ParkerWilliams
相关产品推荐
相关产品推荐

