如何编写脚本移除字符串中单词字母间的空格?
问题分析
你的正则表达式\b(\w\s\w)+\b存在两个核心问题:
- 匹配范围不完整:这个模式只能匹配「字母+空格+字母」的重复组合,无法覆盖奇数个字母的拆分单词(比如例子里的9个字母的
b e a u t i f u l),会遗漏部分字母和空格。 - 单词边界判断错误:
\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
相关产品推荐
相关产品推荐

