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

如何用正则表达式删除单词开头、首尾连字符且保留单词中间连字符

连字符过滤实现方案

核心思路

仅匹配两类需要删除的连字符,保留前后均为字母/数字的连字符不做处理:

  • 出现在单词开头(连字符前方无有效字母/数字)
  • 出现在单词结尾(连字符后方无有效字母/数字)

正确实现代码

import re
# 待处理文本
input_text = "ease singapore-based -fis -sgfis- fatca"
# 正则替换
processed_text = re.sub(r'(?<![A-Za-z0-9])-|-(?![A-Za-z0-9])', '', input_text)
print(processed_text)

正则说明

  • (?<![A-Za-z0-9])-:负向后顾断言,匹配前方没有字母/数字的连字符,对应单词开头的连字符场景
  • |:逻辑或
  • -(?![A-Za-z0-9]):负向前瞻断言,匹配后方没有字母/数字的连字符,对应单词结尾的连字符场景

运行结果

ease singapore-based fis sgfis fatca

原正则错误原因

你之前使用的re.sub(r'[^A-Za-z0-9]+', ' ', input_text)会将所有非字母数字的字符统一替换为空格,连字符属于非字母数字字符,因此无论位置如何都会被删除,不符合保留中间连字符的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:57:00