Regex 从字符串中间修剪空白

Regex 从字符串中间修剪空白,regex,parsing,Regex,Parsing,我使用以下正则表达式捕获一个固定宽度的“description”字段,该字段的长度始终为50个字符: (?.{50}) 我的问题是描述有时包含很多空白,例如 "FLUID COMPRESSOR " 是否有人可以提供一个正则表达式: 修剪结尾处的所有空白 将单词之间的任何空格压缩为一个空格 您要求使用正则表达式有什么特别的原因吗?它们可能不是执行此任务的最佳工具 替代品 s/[ \t]+/ /g 应该压缩内部空白(实际上,它也

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

(?.{50})
我的问题是描述有时包含很多空白,例如

"FLUID        COMPRESSOR                          "
是否有人可以提供一个正则表达式:

  • 修剪结尾处的所有空白
  • 将单词之间的任何空格压缩为一个空格

  • 您要求使用正则表达式有什么特别的原因吗?它们可能不是执行此任务的最佳工具

    替代品

     s/[ \t]+/ /g
    
    应该压缩内部空白(实际上,它也会压缩前导和尾随空白,但听起来这不是问题。),并且

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



    我看不出用一个表达式来表示的方法。

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

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

    s/\s\s+/ /g
    

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

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

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

    str = Regex.Replace(str, " +( |$)", "$1");
    
    re.replace("s/\s+/ /g", str.strip())
    
    不是最有效的,但可读性很强。

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

    C#:

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

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

    我在一个更大的正则表达式中使用它,从s/\s+//g,甚至只是s/\s+//g——它偶尔会将一个空间映射到另一个空间,但这并不重要。但是全局后缀当然很重要。不幸的是,如果它在初始字符串中,所有建议的正则表达式都会在末尾留下一个空格。好极了!这个正则表达式正确地处理单词之间和字符串末尾的空格。我想建议的是一样的。:)
    re.replace("s/\s+/ /g", str.strip())
    
         string x = Regex.Replace(x, @"\s+", " ").Trim();