Java,正则表达式,去除不需要的字符[后跟,前导,之间]

时间:2018-08-02 10:56:19

标签: java regex

我需要一个正则表达式帮助,以从字符串中剥离不需要的字符(在Java中)。 我通过互相跟随4个正则表达式解决了这个问题。 替换将被多次调用(偷看:50次以上/秒),并降低性能。 但是我认为使用单个表达式肯定有可能,因此性能会有所提高。

TestString是

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

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

  • 删除所有主要的非alpha字符– [字符串的开头]
  • 删除所有结尾的非字母数字字符– [字符串结尾]
  • 删除
  • 之间的所有非字母数字字符([_-。]除外)

结果将是

my-Cruil_Display.Nam3

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

在过去的几天里,我尝试了很多次,但是我没有使它起作用。 删除主要的非字母字符可与正则表达式一起使用

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

但是,如果我在“之间”附加“,”将不再起作用

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

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

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

最近一次尝试是

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

任何人都可以帮助实现这一目标

1 个答案:

答案 0 :(得分:3)

您可以使用

^\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