如何使用正则表达式来测试空格或制表符,而不是新行。我试过\s
但发现它也测试了新行。
我使用C#/ WPF,但这不重要。
答案 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”,“”);