从字符串中间修剪空格

时间:2008-10-19 19:49:44

标签: regex parsing

我正在使用以下正则表达式来捕获长度始终为50个字符的固定宽度“description”字段:

(?.{50})

我的问题是描述有时包含空格的 lot ,例如

"FLUID        COMPRESSOR                          "

有人可以提供一个正则表达式:

  1. 修剪所有空白
  2. 将单词之间的任何空格折叠为单个空格

7 个答案:

答案 0 :(得分:15)

为一个空格替换两个或多个空格:

s/  +/ /g

编辑:对于任何空白区域(不仅仅是空格),如果您使用的是perl兼容的正则表达式库,则可以使用\ s,以及出现次数的大括号语法,例如

s/\s\s+/ /g

s/\s{2,}/ /g

编辑#2:忘记/ g全局后缀,谢谢JL

答案 1 :(得分:9)

str = Regex.Replace(str, " +( |$)", "$1");

答案 2 :(得分:2)

Perl的变体: 1)s / \ s + $ //; 2)s / \ s + / / g;

答案 3 :(得分:2)

C#:

只有你想修剪所有的空白区域 - 在开始,结束和中间。

     string x = Regex.Replace(x, @"\s+", " ").Trim();

答案 4 :(得分:1)

您是否有特殊原因要求正则表达式?它们可能不是完成此任务的最佳工具。

这样的替代品
 s/[ \t]+/ /g

应该压缩内部空白(实际上,它也会压缩前导和尾随空格,但听起来不像是一个问题。)和

s/[ \t]+$/$/

将处理尾随空格。 [我在这里使用sed ish语法。你没有说出你喜欢什么味道。]


我手边没有办法在单个表达中做到这一点。

答案 5 :(得分:1)

由于压缩空白和修剪边缘周围的空白是概念上不同的操作,我喜欢分两步完成:

re.replace("s/\s+/ /g", str.strip())

不是最有效的,但非常易读。

答案 6 :(得分:0)

/(^ [\ s \ t] + | [\ s \ t] +([\ s \ t] | $))/ g替换为$ 2(开头|中/末)