Java,正则表达式,去除不需要的字符 [尾随、前导、中间]

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

测试字符串是

"   ! ... 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}]+$)

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


猛跑小猪
浏览 382回答 1
1回答

元芳怎么了

您可以使用^\P{Alpha}+|\P{Alnum}+$|[^\p{Alnum}_.-]爪哇: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}_.-]-字符串中任意位置的除字母数字_、.和-字符以外的任何字符请参阅正则表达式演示。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java