【发布时间】:2008-10-19 19:49:43
【问题描述】:
我正在使用以下正则表达式来捕获始终为 50 个字符长的固定宽度“描述”字段:
(?.{50})
我的问题是描述有时包含很多个空格,例如
"FLUID COMPRESSOR "
谁能提供一个正则表达式:
- 修剪所有结尾的空格
- 将单词之间的任何空格折叠成一个单个空格
【问题讨论】:
我正在使用以下正则表达式来捕获始终为 50 个字符长的固定宽度“描述”字段:
(?.{50})
我的问题是描述有时包含很多个空格,例如
"FLUID COMPRESSOR "
谁能提供一个正则表达式:
【问题讨论】:
用两个或多个空格代替一个空格:
s/ +/ /g
编辑:对于任何空白(不仅仅是空格),如果您使用的是与 perl 兼容的正则表达式库,则可以使用 \s 以及出现次数的花括号语法,例如
s/\s\s+/ /g
或
s/\s{2,}/ /g
编辑 #2:忘记了 /g 全局后缀,谢谢 JL
【讨论】:
str = Regex.Replace(str, " +( |$)", "$1");
【讨论】:
Perl 变体: 1) s/\s+$//; 2) s/\s+/ /g;
【讨论】:
C#:
仅当您想要修剪所有空白时 - 在开头、结尾和中间。
string x = Regex.Replace(x, @"\s+", " ").Trim();
【讨论】:
您要求使用正则表达式是否有特殊原因?它们可能不是完成这项任务的最佳工具。
类似的替代品
s/[ \t]+/ /g
应该压缩内部空格(实际上,它也会压缩前导和尾随空格,但听起来这不是问题。),并且
s/[ \t]+$/$/
将处理尾随空格。 [我在这里使用sedish 语法。你没有说你喜欢什么口味。]
马上,我看不出用一个表达式就能做到这一点。
【讨论】:
由于压缩空白和修剪边缘的空白在概念上是不同的操作,我喜欢分两步进行:
re.replace("s/\s+/ /g", str.strip())
不是最有效的,但可读性很强。
【讨论】:
/(^[\s\t]+|[\s\t]+([\s\t]|$))/g 替换为$2(开始|中间/结束)
【讨论】: