【问题标题】:Java, Regex, strip unwanted characters [trailing, leading, between]Java,Regex,去除不需要的字符[尾随,前导,之间]
【发布时间】:2018-08-02 10:56:19
【问题描述】:

我需要正则表达式的帮助,以从字符串中删除不需要的字符(在 Java 中)。 我用4个正则表达式解决了这个问题。 替换将被多次调用 [peeks: 50+ times/sec] 它并降低性能。 但我认为用一个表达式肯定可以,所以性能会有所提高。

TestString 是

"   ! ... my-Cruc i@l_\\/Disp lay.Na#m3 ?;()!    "

我喜欢用正则表达式执行的任务

  • 删除所有前导非字母字符 - [字符串开头]
  • 删除所有尾随的非字母数字字符 - [字符串结尾]
  • 删除所有非字母数字字符(除了[_-.])

所以结果会是

my-Cruil_Display.Nam3

问题在于内置模式 Alnum 和 alpha 之间的切换,具体取决于字符串中的位置(开始、结束)和它们之间的异常字符 [_-.]。

在过去的几天里我尝试了很多次,但我没有让它工作。 删除前导非字母字符正在使用正则表达式

^([^\\p{Alpha}]+)?

但是,如果我附加“之间”,它就不再起作用了

使用正则表达式删除尾随的非字母字符

([^\\p{Alnum}]+$) 

正在工作,但不能与所有其他正则表达式组合

最后一次尝试是

(^[^\\p{Alpha}]+)?[^\\p{Alnum}\\._-]+([^\\p{Alnum}]+$)

任何人都可以帮助完成这项工作

【问题讨论】:

    标签: java regex


    【解决方案1】:

    你可以使用

    ^\P{Alpha}+|\P{Alnum}+$|[^\p{Alnum}_.-]
    

    Java:

    s = s.replaceAll("^\\P{Alpha}+|\\P{Alnum}+$|[^\\p{Alnum}_.-]", "");
    

    或者,要使其识别 Unicode,请添加 (?U) 标志:

    s = s.replaceAll("(?U)^\\P{Alpha}+|\\P{Alnum}+$|[^\\p{Alnum}_.-]", "");
    

    详情

    • ^\P{Alpha}+ - 字符串开头的任何 1 个或多个字符(字母字符除外)
    • | - 或
    • \P{Alnum}+$ - 字符串末尾除字母数字字符外的任何 1 个或多个字符
    • | - 或
    • [^\p{Alnum}_.-] - 除字母数字以外的任何字符,_.- 字符串中任意位置的字符

    请参阅regex demo

    【讨论】:

    • 最诚挚的感谢。我花了很多时间,你在几分钟内就搞定了。有点令人沮丧..但得到确认没有显示树木的树林。
    猜你喜欢
    • 1970-01-01
    • 2011-10-02
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 2015-08-03
    相关资源
    最近更新 更多