正则表达式:查找空格(制表符/空格)但不是换行符

时间:2010-08-27 10:02:48

标签: regex

如何使用正则表达式来测试空格或制表符,而不是新行。我试过\s但发现它也测试了新行。

我使用C#/ WPF,但这不重要。

5 个答案:

答案 0 :(得分:146)

使用字符类:[ \t]

答案 1 :(得分:27)

试试这个字符集:

[ \t]

这只匹配空格或制表符。

答案 2 :(得分:13)

正如@EiríkrÚtlendi所指出的,接受的解决方案只考虑两个空格字符:水平制表符(U + 0009)和空格(U + 0020)。它不考虑其他空白字符,例如非破坏空格(恰好在我试图处理的文本中)。 Wikipedia中包含更完整的空白字符列表,并在linked Perl answer中引用。可以使用character class subtraction

构建一个简单的C#解决方案来解释这些其他字符
[\s-[\r\n]]

或者,包括EiríkrÚtlendi的解决方案,你得到了

[\s\u3000-[\r\n]]

答案 3 :(得分:3)

注意:对于那些处理CJK文本(中文,日文和韩文)的人来说,包含的双字节空格(Unicode \u3000)在\s中我已经尝试过的任何实现(Perl,.NET,PCRE,Python)。您需要首先规范化字符串(例如将所有\u3000替换为\u0020),否则除了其他任何空格之外,您还必须使用包含此代码点的字符集'重定位,例如[ \t\u3000]

如果您使用的是Perl或PCRE,则可以选择使用{{1>} 水平空白的简写,其中包含单字节空格,双字节空格,以及制表符等。有关更多详细信息,请参阅 Match whitespace but not newlines (Perl) 主题。

但是,这个\h简写并没有为.NET和C#实现,正如我所能说的那样。

答案 4 :(得分:0)

如果您要替换空格,以下代码在c#中对我有用

Regex.Replace(Line,“ \\ s”,“”);

对于标签

Regex.Replace(Line,“ \\ s \\ s”,“”);