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

如何编写脚本移除字符串中单词字母间的空格?

问题分析

你的正则表达式\b(\w\s\w)+\b存在两个核心问题:

  1. 匹配范围不完整:这个模式只能匹配「字母+空格+字母」的重复组合,无法覆盖奇数个字母的拆分单词(比如例子里的9个字母的b e a u t i f u l),会遗漏部分字母和空格。
  2. 单词边界判断错误:\b是单词边界,而拆分单词内部的空格前后都是单个字母,\b在这里无法正确界定整个拆分单词的范围,导致匹配失效。
解决方案

可以分两步处理:先合并拆分字母间的空格,再统一合并单词间的多空格,代码如下:

string input = "Hello, this is a  b e a u t i f u l  day";
// 第一步:合并所有被空格拆分的单个字母序列
string step1 = Regex.Replace(input, @"(?:\w\s+)+\w", match => match.Value.Replace(" ", ""));
// 第二步:将单词间的多个空格合并为单个空格
string result = Regex.Replace(step1, @"\s+", " ");

Console.WriteLine(result); // 输出:Hello, this is a beautiful day

正则说明

  • (?:\w\s+)+\w:匹配「单个字母+一个或多个空格」的重复组合,最后以单个字母结尾,正好对应被拆分的单词(比如b e a u t i f u l),替换时直接移除匹配内容里的所有空格。
  • \s+:匹配一个或多个空白字符,替换为单个空格,统一单词间的空格格式。

如果想一步完成字母间空格的移除(后续仍需合并单词间多空格),也可以使用带正向断言的正则,但可读性稍差:

string result = Regex.Replace(input, @"(?<=\w)\s+(?=\w(?:\s+\w)*\b)", "");
result = Regex.Replace(result, @"\s+", " ");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:08:34