Answers:
正如@EiríkrÚtlendi指出的那样,已接受的解决方案仅考虑两个空格字符:水平制表符(U + 0009)和分隔符(U + 0020)。它不考虑其他空格字符,例如不间断空格(碰巧出现在我要处理的文本中)。Wikipedia上提供了更完整的空格字符列表,并且在链接的Perl答案中也引用了该列表。可以使用字符类减法来构建解决这些其他字符的简单C#解决方案
[\s-[\r\n]]
或者,包括EiríkrÚtlendi的解决方案,您将获得
[\s\u3000-[\r\n]]
注:对于那些与CJK文本(中国,日本,和韩国的),双字节空间(统一\u3000
)是不包含在\s
为我试过到目前为止(Perl中,.NET,PCRE,Python)的任何实现。你要么需要正常化的第一个字符串(如更换所有\u3000
有\u0020
),否则你将不得不使用的字符集,其中包括该代码点除了任何其他空格你的目标,如[ \t\u3000]
。
如果您使用的是Perl或PCRE,则可以选择使用水平空白的\h
简写形式,其中似乎包括单字节空间,双字节空间和制表符等。有关更多详细信息,请参见“ 匹配空白”而不是“换行符(Perl)”线程。
但是,\h
如我所知,尚未为.NET和C#实现此简写。
\h
(在Java 8中引入)确实包括\u3000
,但不包括\s
,除非您设置UNICODE_CHARACTER_CLASS模式(在Java 7中引入)。
如果您想更换空间下面为我工作的代码C#
Regex.Replace(Line,"\\\s","");
对于制表符
Regex.Replace(Line,"\\\s\\\s","");
\h
字符类,但确实显示出还有许多其他空白字符,以防万一您需要将其添加到此处的列表中。