我需要一个正则表达式帮助,以从字符串中剥离不需要的字符(在Java中)。 我通过互相跟随4个正则表达式解决了这个问题。 替换将被多次调用(偷看:50次以上/秒),并降低性能。 但是我认为使用单个表达式肯定有可能,因此性能会有所提高。
TestString是
" ! ... my-Cruc i@l_\\/Disp lay.Na#m3 ?;()! "
我喜欢用正则表达式执行的任务
结果将是
my-Cruil_Display.Nam3
问题在于内置模式Alnum和alpha之间的切换,具体取决于字符串中的位置(开头,结尾)以及它们之间的异常字符[_-。]。
在过去的几天里,我尝试了很多次,但是我没有使它起作用。 删除主要的非字母字符可与正则表达式一起使用
^([^\\p{Alpha}]+)?
但是,如果我在“之间”附加“,”将不再起作用
使用正则表达式删除尾随的非alpha字符
([^\\p{Alnum}]+$)
正在工作,但不能与所有其他正则表达式结合使用
最近一次尝试是
(^[^\\p{Alpha}]+)?[^\\p{Alnum}\\._-]+([^\\p{Alnum}]+$)
任何人都可以帮助实现这一目标
答案 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。