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

Regex won't match whitespace character with [\r\n\t\f\s]

这可能是一个非常简单的修复,但我想不通!

我试图在给定以下文本的一行中匹配(最多)3 个大写单词。

Russell Lake West。匹配应包括所有 3 个词。

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

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

这个正则表达式 匹配所有 3 个词,但我必须 copy/paste LakeWest 之间的空格才能工作(demo here):

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

                                       ^ pasted it here

所以我假设可能空格没有被视为空格,但可能是换行符或类似字符,所以我尝试了这个 (demo here):

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

但它无法识别 West 之前的任何字符,因此不会返回任何结果。

为什么 regex101 或 Java 不能识别 LakeWest 之间明显的空白?处理此问题的可靠方法是什么?

空间有很多种。您在 demo is non-breaking 中使用的那个(在 Unicode table 中索引为 160)不属于 \s(空白字符 class),因为它不属于代表我们可以期望文本被分成单独的部分(如行)的地方。
BTW \s 已经表示:\r \n \t \f.

要匹配它,您可以使用 \p{Zs} class.
您还可以将 \s\p{Zs} class 与 [\p{Zs}\s].

结合使用