小编典典

正则表达式不会将空格字符与[\ r \ n \ t \ f \ s]匹配

java

这可能是一个非常简单的修复程序,但我无法弄清楚!

给定以下文本,我正在尝试连续匹配(最多)3个大写单词。

Russell Lake West。比赛应包括所有3个单词。

此正则表达式将匹配前两个单词,但不匹配第三个单词(此处为demo):

(([A-Z][a-z]+)\s{0,2}([A-Z][a-z]+)?\s{0,2}([A-Z][a-z]+)?)

这个正则表达式
匹配所有3个单词,但是我必须在之间复制/粘贴空格,Lake然后West它才能正常工作(此处演示):

(([A-Z][a-z'-]+)\s{0,2}([A-Z][a-z'-]+)? \s{0,2}([A-Z][a-z'-]+)?)

                                       ^ pasted it here

所以我假设也许空白不被当作空白,而是换行符或类似字符,所以我尝试了这个(这里是演示)

[\r\n\t\f\s]West

但是它之前不能识别任何这些字符West,因此不会返回任何结果。

为什么regex101或Java无法识别Lake和之间的明显空白West?解决此问题的可靠方法是什么?


阅读 445

收藏
2020-11-30

共1个答案

小编典典

有很多种类的空间。您在演示中使用的是不间断的(在Unicode表中索引为160),它不属于\s(空格字符类),因为它不代表我们可以期望将文本拆分成单独位置的位置零件像线。
BTW \s已代表:\r \n \t \f

要匹配它,您可以使用\p{Zs}class。
您还可以将\s\p{Zs}类都与结合使用[\\p{Zs}\\s]

2020-11-30