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

Python正则表达式:仅移除小写字母间的连字符

解决Python正则移除小写字母间连字符的问题

嘿,我来帮你搞定这个正则问题!你当前的表达式有两个关键问题,导致没法得到期望的结果:

  1. 不必要地转义了方括号(\[a-z]应该写成[a-z]);
  2. 直接把匹配到的[a-z]-[a-z]整个替换为空,会同时删掉连字符前后的小写字母,这显然不是你想要的。

正确的两种实现方式

你需要只匹配小写字母之间的连字符,并保留前后的字母,下面是两种可靠的解法:

方法1:使用正向断言(推荐)

通过正向后查和预查精准定位符合条件的连字符,只删除连字符本身:

import re

text = 'hyphen-ated Asia-Pacific 11-12'
result = re.sub(r'(?<=[a-z])-(?=[a-z])', '', text)
print(result)  # 输出: hyphenated Asia-Pacific 11-12
  • (?<=[a-z]):正向后查,确保连字符前是小写字母;
  • (?=[a-z]):正向预查,确保连字符后是小写字母;
  • 这样匹配的只有中间的连字符,替换为空就不会影响前后的字母,也不会触碰其他类型的连字符(比如大写字母间、数字间的)。

方法2:使用捕获组

通过捕获连字符前后的小写字母,替换时拼接两个捕获组,跳过连字符:

import re

text = 'hyphen-ated Asia-Pacific 11-12'
result = re.sub(r'([a-z])-([a-z])', r'\1\2', text)
print(result)  # 输出: hyphenated Asia-Pacific 11-12
  • ([a-z]):捕获连字符前的小写字母到组1;
  • ([a-z]):捕获连字符后的小写字母到组2;
  • 替换时用\1\2拼接两个组,相当于把中间的连字符去掉。

两种方法都能完美实现你的需求,不会影响Asia-Pacific(大写字母后的连字符)和11-12(数字间的连字符)。

内容的提问来源于stack exchange,提问作者JSC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:47:15