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

Car*_*ten 31 java regex

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

[编辑]

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

[回答]

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

[\p{Z}\s]

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

Vin*_*vic 37

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

你在这里混合抽象级别.

如果,经过仔细重读问题之后的情况似乎就是这种情况,那么您将找到一种方法来匹配所有指向标准ASCII加上空白代码点的空白字符,\p{Z}或者\p{Zs}将完成工作.

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

  • 请改用"\ p {Z}"或"\ p {Zs}".我用Java测试过,它们匹配U + 00A0. (11认同)

And*_*mar 11

 仅在HTML空白.使用HTML解析器提取纯文本.并且\s应该工作得很好.

  • @BalusC:不知道HTLM Parser那样做了.您可以使用`\ p {Z}`而不是`\ s`来匹配空格,它将匹配`\ u00A0` (15认同)

Bal*_*usC 11

你按照我的预期澄清了这个问题:你实际上并不是在寻找字符串文字, 因为这里的许多人似乎都在想,解决方案太明显了.

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

在其中一条评论中编辑,您可以使用未记录 "\\p{Z}"的内容.艾伦,你能不能发表评论你是怎么发现的?这个非常有用.

  • 它是(许多)标准Unicode属性shorthands之一.它们在Pattern API文档中被提及,尽管这个不在示例中.这是一个很好的概述:http://www.regular-expressions.info/unicode.html#prop但它没有那么有用:它与换行符,制表符或(显然)任何其他ASCII空格不匹配,除了空间(U + 0020).也许这就是你从未听说过的原因.:) (3认同)

ski*_*iou 5

如果有人再次遇到这个问题寻求帮助,我建议寻求以下答案:/sf/answers/437885871/

简短版本:\\p{javaSpaceChar}

原因:根据Pattern 类,这映射了Character.isSpaceChar方法:

行为类似于 java.lang.Character boolean is methodname方法的类别(已弃用的方法除外)可通过相同的 \p{ prop } 语法使用,其中指定属性的名称为 java methodname