正则表达式不会将空白字符与 [\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 Lake
和 West
之间的空格才能工作(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 不能识别 Lake
和 West
之间明显的空白?处理此问题的可靠方法是什么?
空间有很多种。您在 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]
.
结合使用
这可能是一个非常简单的修复,但我想不通!
我试图在给定以下文本的一行中匹配(最多)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 Lake
和 West
之间的空格才能工作(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 不能识别 Lake
和 West
之间明显的空白?处理此问题的可靠方法是什么?
空间有很多种。您在 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]
.