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


96

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

我使用C#/ WPF,但这无关紧要。

Answers:


189

使用字符类: [ \t]


1
发现我的问题。另请参见stackoverflow.com/a/25956935/292060,以获取仅用于perl的\h字符类,但确实显示出还有许多其他空白字符,以防万一您需要将其添加到此处的列表中。
goodeye 2015年

3
为什么前面要有空间\t
Ooker

4
@Ooker捕获文字空间
codemonkee

正如其他答案所提到的,这与其他类型的空格不匹配。
古斯

1
为什么\ t前面有空格?
Catbuilts

35

尝试以下字符集:

[ \t]

这仅与空格或制表符匹配。


14

正如@EiríkrÚtlendi指出的那样,已接受的解决方案仅考虑两个空格字符:水平制表符(U + 0009)和分隔符(U + 0020)。它不考虑其他空格字符,例如不间断空格(碰巧出现在我要处理的文本中)。Wikipedia上提供了更完整的空格字符列表,并且在链接的Perl答案中也引用了该列表。可以使用字符类减法来构建解决这些其他字符的简单C#解决方案

[\s-[\r\n]]

或者,包括EiríkrÚtlendi的解决方案,您将获得

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

3

注:对于那些与CJK文本(中国,日本,和韩国的),双字节空间(统一\u3000)是包含在\s为我试过到目前为止(Perl中,.NET,PCRE,Python)的任何实现。你要么需要正常化的第一个字符串(如更换所有\u3000\u0020),否则你将不得不使用的字符集,其中包括该代码点除了任何其他空格你的目标,如[ \t\u3000]

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

但是,\h如我所知,尚未为.NET和C#实现此简写。


1
好点子。Java \h(在Java 8中引入)确实包括\u3000,但不包括\s,除非您设置UNICODE_CHARACTER_CLASS模式(在Java 7中引入)。
艾伦·摩尔

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.