这可能是一个非常简单的修复,但我无法解决这个问题!
我试图在给定以下文本的情况下连续匹配(最多)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个单词,但我必须复制/粘贴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
之间的明显空白?什么是处理这个问题的可靠方法?
答案 0 :(得分:4)
有很多种空间。您在demo中使用的那个是non-breaking一个(在Unicode表中索引为160),它不属于\s
(空格字符类),因为它没有&#39} ; t表示我们可以期望将文本拆分为单独部分(如行)的位置
BTW \s
已经代表:\r
\n
\t
\f
。
要匹配它,您可以使用\p{Zs}
课程
您还可以将\s
和\p{Zs}
类与[\\p{Zs}\\s]
结合使用。