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

Jie*_*eng 85 regex

我怎样才能有一个正则表达式来测试空格或制表符而不是换行符.我试过\s但发现它也测试换行了.

我使用C#/ WPF但是没关系.

Lek*_*eyn 169

使用字符类: [ \t]

  • @Ooker捕获文字空间 (4认同)
  • 为什么在'\ t`之前有空格? (3认同)
  • 为什么 \t 之前有一个空格? (2认同)

Gum*_*mbo 31

试试这个字符集:

[ \t]
Run Code Online (Sandbox Code Playgroud)

这只匹配空格或制表符.


erd*_*mke 14

正如@EiríkrÚtlendi所指出的,接受的解决方案只考虑两个空格字符:水平制表符(U + 0009)和空格(U + 0020).它不考虑其他空白字符,例如非破坏空格(恰好在我试图处理的文本中).维基百科上包含更完整的空白字符列表,并在链接的Perl答案中引用.可以使用字符类减法构建一个简单的C#解决方案来解释这些其他字符

[\s-[\r\n]]
Run Code Online (Sandbox Code Playgroud)

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

[\s\u3000-[\r\n]]
Run Code Online (Sandbox Code Playgroud)


Eir*_*ndi 6

注:对于那些与CJK文本(中国,日本,和韩国的),双字节空间(统一\u3000)是包含在\s为我试过到目前为止(Perl中,.NET,PCRE,Python)的任何实现。您需要首先对字符串进行规范化(例如将全部替换\u3000\u0020),或者您必须使用包含此代码点的字符集以及您所针对的任何其他空格,例如[ \t\u3000].

如果您使用的是 Perl 或 PCRE,您可以选择使用水平空白\h简写,它似乎包括单字节空间、双字节空间和制表符等。有关更多详细信息,请参阅匹配空格但不匹配换行符 (Perl)线程。

但是,据\h我所知,这种速记还没有针对 .NET 和 C# 实现。