【问题标题】:Remove all special characters from a string not including non-latin characters从字符串中删除所有特殊字符,不包括非拉丁字符
【发布时间】:2014-05-31 20:58:56
【问题描述】:

我想从字符串中删除除数字和普通 a-z 字符之外的所有特殊字符。

我是这样做的:

text = text.replaceAll("[^a-zA-Z0-9 ]+", "");

这种方式的问题在于它还会删除所有非拉丁字符,如 è、é、ê、ë 和许多其他字符。

我所说的非特殊字符(我想保留的那些)是指所有语言的所有数字和所有字母字符,或者至少尽可能多。

如何只删除特殊字符?

【问题讨论】:

  • 也许你应该定义什么是特殊字符。哪个集合更大?
  • @SotiriosDelimanolis 特殊字符是所有语言中除数字和字母之外的所有字符。

标签: java regex string replace


【解决方案1】:

您可以尝试\p{L} 用于所有字母,\p{N} 用于所有数字:

text = text.replaceAll("[^\\p{L}\\p{N} ]+", "");

【讨论】:

  • +1 虽然你不需要量词,你可以使用 \\P 代替类否定。
  • 试过[\\P{L}\\P{N} ]+它吃了所有东西:|
  • 因为第二项取消了第一项。你得换两次。不幸的是,Alnum posix 不适用于 Unicode...
【解决方案2】:

我知道你说的是正则表达式,但是如果番石榴是一个选项

CharMatcher.JAVA_LETTER_OR_DIGIT.retainFrom("èêAAAGRt123")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    相关资源
    最近更新 更多