java - 正则表达式不会将空格字符与 [\r\n\t\f\s] 匹配

标签 java regex string newline whitespace

这可能是一个非常简单的修复,但我想不出来!

在给定以下文本的情况下,我正在尝试连续匹配(最多)3 个大写单词。

罗素湖西。匹配应包括所有 3 个词。

此正则表达式将匹配前两个单词但不匹配第三个单词 ( demo here ):

(([A-Z][a-z]+)\s{0,2}([A-Z][a-z]+)?\s{0,2}([A-Z][a-z]+)? )

此正则表达式 匹配所有 3 个词,但我必须复制/粘贴 LakeWest 之间的空格才能正常工作( 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 无法识别 LakeWest 之间明显的空白?处理此问题的可靠方法是什么?

最佳答案

空间有很多种。您在 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/

相关文章:

Java J2E 无法在我的 servlet 中使用 sendRedirect()

java - 如何在不重新配置或数据丢失的情况下将 Solr 从 3.1 升级到 3.2

c# - 寻找简单而强大的 windows 通配符 (`*, ?` ) 匹配实现

c# - 正则表达式匹配从头开始

javascript - 如何从 JavaScript 字符串中删除无效的 UTF-8 字符?

java - 如何相互检查两个字符串列表?

java - 比较两个字符串并按字母顺序对它们进行排序

C++ 字符串使用分配的最大缓冲区?

java - Spring 动态 URL 生成器的想法

java - 如何在 Handlebars 中使用没有路径的图像