【问题标题】:Remove all special characters from a string except for digits and the degree symbol?从字符串中删除除数字和度数符号之外的所有特殊字符?
【发布时间】:2017-04-05 09:40:05
【问题描述】:

我想从字符串中删除除数字和度数符号°之外的所有特殊字符。如何使用正则表达式来做到这一点?

我知道 .replaceAll("[^a-zA-Z0-9]+","") 会删除所有特殊字符,如何将度数符号放回?

【问题讨论】:

  • 你为什么不把学位字符放在你的排除类中?

标签: java android regex string


【解决方案1】:

您可以使用 unicode 字符:°\u00b0。所以你的正则表达式可以是这样的:

[^a-zA-Z0-9\\u00b0]+

示例:https://regex101.com/r/ZgGdHj/3

【讨论】:

    【解决方案2】:

    您可以使用\W 并使用字符类减法

    .replaceAll("[\\W_&&[^°]]+","")
    

    另一种方法是将度数符号添加到您拥有的否定字符类中,因为否定字符类匹配所有字符除了字符类中的字符:

    .replaceAll("[^a-zA-Z0-9°]+","")
                            ^
    

    测试于:http://www.ocpsoft.org/tutorials/regular-expressions/java-visual-regex-tester/

    【讨论】:

    • 由于某种原因,我的学位符号也打印了一个抑扬符,Â。你以前有过这样的经历吗?
    • 这只是意味着ASCII中的文本被编码为UTF8。这是一个常规的编码问题
    • 可惜ocpsoft.org/tutorials/regular-expressions/…不生成分享链接。请注意,如果您想在结果字符串中保留_,您应该按照我在上面的模式中显示的那样添加它。否则,如果您应该将其从模式中删除。
    • 嗯,我无法删除那个抑扬顿挫的 A,但我想您提供的内容适用于大多数情况。
    • 哦,我明白发生了什么。我正在从 UTF8 源复制学位符号,可能是在线的。我改用(char) 0x00B0 + "C" 并将其附加到我的字符串中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多