为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

猛跑小猪 2021-06-15 13:30:05
我需要正则表达式的帮助以从字符串中去除不需要的字符(在 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}]+$)任何人都可以帮助完成这项工作
查看完整描述

1 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

您可以使用

^\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}_.-]-字符串中任意位置的除字母数字_.-字符以外的任何字符

请参阅正则表达式演示


查看完整回答
反对 回复 2021-06-23
  • 1 回答
  • 0 关注
  • 381 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信