我怎么能有一个正则表达式来测试空格或制表符,而不是换行符?我试过\s,但我发现它也测试换行符。我使用C#(.NET)和WPF,但这并不重要。
\s
vql8enpb1#
使用字符类:[ \t]
[ \t]
mcvgt66p2#
试试这个字符集:
这只匹配空格或制表符。
0pizxfdo3#
就像Eiríkr Schultlendi指出的那样,公认的解决方案只考虑两个白色空格字符:水平标签(U+0009)和中断空格(U+0020)。它不考虑其他白色空格字符,如非中断空格(这恰好是在我试图处理的文本)。一个更完整的白色空格字符列表包含在on Wikipedia中,也在linked Perl answer中引用。一个简单的C#解决方案,可以使用字符类减法来构建这些其他字符:
[\s-[\r\n]]
或者,包括Eiríkr Útlendi的解决方案,你得到
[\s\u3000-[\r\n]]
daupos2t4#
注意:对于那些处理CJK文本(中文,日文和韩文)的人来说,对于我迄今为止尝试过的任何实现(Perl,.NET,PCRE和Python),双字节空间(Unicode \u3000)都不包含在\s中。您需要首先规范化字符串(比如用\u0020替换所有的\u3000),或者必须使用一个字符集,该字符集除了要使用的任何其他白色空间(比如[ \t\u3000])之外,还包含此代码点。
\u3000
\u0020
[ \t\u3000]
如果您使用Perl或PCRE,您可以选择使用\h简写 horizontal whitespace,它似乎包括单字节空格、双字节空格和制表符等。有关详细信息,请参阅 Match whitespace but not newlines (Perl) 问题。然而,据我所知,这种\h简写还没有在.NET和C#中实现。
\h
eqoofvh95#
如果你想替换space,下面的代码在C#中对我有用。
Regex.Replace(Line, "\\\s", "");
对于Tab
Regex.Replace(Line, "\\\s\\\s", "");
whhtz7ly6#
你的语法老师可能不是程序员,所以使用双重否定:
[^\S\r\n]
也就是说,not-not-whitespace(大写的S补码)或not-carriage-return或not-newline。用De Morgan’s law分配外部not(* 即 *,字符类中的互补^),这相当于“空格但不回车或换行符”。在模式中包含\r和\n可以正确处理所有Unix(LF)、经典Mac OS(CR)和DOS(CR LF)换行符约定。如果你使用PCRE,other options are available。
S
^
\r
\n
6条答案
按热度按时间vql8enpb1#
使用字符类:
[ \t]
mcvgt66p2#
试试这个字符集:
这只匹配空格或制表符。
0pizxfdo3#
就像Eiríkr Schultlendi指出的那样,公认的解决方案只考虑两个白色空格字符:水平标签(U+0009)和中断空格(U+0020)。它不考虑其他白色空格字符,如非中断空格(这恰好是在我试图处理的文本)。
一个更完整的白色空格字符列表包含在on Wikipedia中,也在linked Perl answer中引用。一个简单的C#解决方案,可以使用字符类减法来构建这些其他字符:
或者,包括Eiríkr Útlendi的解决方案,你得到
daupos2t4#
注意:对于那些处理CJK文本(中文,日文和韩文)的人来说,对于我迄今为止尝试过的任何实现(Perl,.NET,PCRE和Python),双字节空间(Unicode
\u3000
)都不包含在\s
中。您需要首先规范化字符串(比如用\u0020
替换所有的\u3000
),或者必须使用一个字符集,该字符集除了要使用的任何其他白色空间(比如[ \t\u3000]
)之外,还包含此代码点。如果您使用Perl或PCRE,您可以选择使用
\h
简写 horizontal whitespace,它似乎包括单字节空格、双字节空格和制表符等。有关详细信息,请参阅 Match whitespace but not newlines (Perl) 问题。然而,据我所知,这种
\h
简写还没有在.NET和C#中实现。eqoofvh95#
如果你想替换space,下面的代码在C#中对我有用。
对于Tab
whhtz7ly6#
你的语法老师可能不是程序员,所以使用双重否定:
也就是说,not-not-whitespace(大写的
S
补码)或not-carriage-return或not-newline。用De Morgan’s law分配外部not(* 即 *,字符类中的互补^
),这相当于“空格但不回车或换行符”。在模式中包含\r
和\n
可以正确处理所有Unix(LF)、经典Mac OS(CR)和DOS(CR LF)换行符约定。如果你使用PCRE,other options are available。