这可能是一个非常简单的修复程序,但我无法弄清楚!
给定以下文本,我正在尝试连续匹配(最多)3个大写单词。
Russell Lake West。比赛应包括所有3个单词。
Russell Lake West
此正则表达式将匹配前两个单词,但不匹配第三个单词(此处为demo):
(([A-Z][a-z]+)\s{0,2}([A-Z][a-z]+)?\s{0,2}([A-Z][a-z]+)?)
这个正则表达式 将 匹配所有3个单词,但是我必须在之间复制/粘贴空格,Lake然后West它才能正常工作(此处演示):
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。
\s
\r
\n
\t
\f
要匹配它,您可以使用\p{Zs}class。 您还可以将\s和\p{Zs}类都与结合使用[\\p{Zs}\\s]。
\p{Zs}
[\\p{Zs}\\s]