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

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

给定以下文本,我正在尝试连续匹配(最多)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?解决此问题的可靠方法是什么?

回答:

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

BTW \s已代表:\r\n\t\f

要匹配它,您可以使用\p{Zs}class。

您还可以将\s\p{Zs}类都与结合使用[\\p{Zs}\\s]

以上是 正则表达式不会将空格字符与[\ r \ n \ t \ f \ s]匹配 的全部内容, 来源链接: utcz.com/qa/402492.html

回到顶部