Java正则表达式匹配_all_空白字符

时间:2009-11-30 22:13:45

标签: java regex

我在Java中寻找一个匹配String中所有空白字符的正则表达式。 “\ s”仅匹配一些,它与 和类似的非ascii空格不匹配。我正在寻找一个正则表达式,它匹配Java String中可能出现的所有(常见)空格字符。

[编辑]

澄清:我不是指字符串序列“ ”我指的是通常由“ ”表示的sincle unicode字符U + 00A0,例如在HTML中,以及具有类似的空白区域的所有其他unicode字符,例如, “NARROW NO-BREAK SPACE”(U + 202F),以Unicode 3.2及以上编码为U + 2060的Word连接器,“ZERO WIDTH NO-BREAK SPACE”(U + FEFF)以及任何其他可以归为白色的角色 - 空间。

[答案]

对于我的目的,即捕获所有空白字符,unicode + traditional,以下表达式完成工作:

[\p{Z}\s]

答案在下面的评论中,但由于它有点隐藏,我在这里重复一遍。

7 个答案:

答案 0 :(得分:36)

&安培; NBSP;就正则表达而言,它不是空白字符。您需要修改正则表达式以包含除\ s之外的那些字符串,例如/(\ s |& nbsp; |%20)/,或者先解析字符串内容以获取数据的ASCII或Unicode表示形式。

你在这里混合抽象级别。

如果,在仔细阅读问题之后似乎是这种情况,那么您将找到一种匹配所有空格字符的方法,这些字符引用标准ASCII加上空格代码点,\p{Z}\p{Zs}将做的工作。

你应该澄清你的问题,因为它误导了很多人(甚至给出了一些正确的答案)。

答案 1 :(得分:11)

 只是HTML中的空格。使用HTML parser提取纯文本。并且\s应该可以正常工作。

答案 2 :(得分:11)

你按照我的预期澄清了这个问题:你实际上并不是在寻找字符串文字 ,正如许多人在想这样,解决方案太明显了。

嗯,不幸的是,使用正则表达式无法匹配它们。最好是在模式中包含特定的代码点,例如:"[\\s\\xA0]"

编辑已在其中一条评论中显示,您可以使用undocumented "\\p{Z}"进行此操作。艾伦,你能不能发表评论你是怎么发现的?这个非常有用。

答案 3 :(得分:3)

以下是我对“空白”的几个竞争性定义的总结:

http://spreadsheets.google.com/pub?key=pd8dAQyHbdewRsnE5x5GzKQ

您可能最终必须明确列出您关注的其他预制件与其中一个预制件不匹配的。

答案 4 :(得分:2)

 不是空格。它是一个字符编码序列,表示HTML中的空格。您很可能希望在运行字符串匹配之前将HTML编码的文本转换为纯文本。如果是这种情况,请去查找 javax.swing.text.html

答案 5 :(得分:2)

如果有人再次遇到此问题寻求帮助,我建议您采取以下答案:https://stackoverflow.com/a/6255512/1678392

简短版本:\\p{javaSpaceChar}

原因:根据Pattern class,这会映射Character.isSpaceChar方法:

  

表现类似于java.lang.Character布尔值的类别是 methodname 方法(不推荐使用的方法除外)可通过相同的\ p { prop }语法获得指定的属性具有名称java methodname

?

答案 6 :(得分:0)

正则表达式字符是唯一独立于编码的字符。以下是一些字符列表 - 在Unicode中 - 是非打印的:

How many non-printing characters are in common use?