这可能是一个非常简单的修复,但我想不出来!
在给定以下文本的情况下,我正在尝试连续匹配(最多)3 个大写单词。
罗素湖西
。匹配应包括所有 3 个词。
此正则表达式将匹配前两个单词但不匹配第三个单词 ( demo here ):
(([A-Z][a-z]+)\s{0,2}([A-Z][a-z]+)?\s{0,2}([A-Z][a-z]+)? )
此正则表达式将 匹配所有 3 个词,但我必须复制/粘贴 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
之前的任何字符,因此不会返回任何结果。
为什么 regex101 或 Java 无法识别 Lake
和 West
之间明显的空白?处理此问题的可靠方法是什么?
最佳答案
空间有很多种。您在 demo 中使用的那个是non-breaking一个(在 Unicode 表中索引为 160)不属于 \s
(空白字符类)因为它不代表我们可以期望文本被分割成单独的部分(如行)的位置。
顺便说一句 \s
已经代表:\r
\n
\t
\f
.
要匹配它,您可以使用 \p{Zs}
类。
您也可以结合使用 \s
和 \p{Zs}
类 [\\p{Zs}\\s]
.
关于java - 正则表达式不会将空格字符与 [\r\n\t\f\s] 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34710972/