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