我需要正则表达式的帮助以从字符串中去除不需要的字符(在 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}_.-]
-字符串中任意位置的除字母数字_
、.
和-
字符以外的任何字符
请参阅正则表达式演示。
添加回答
举报
0/150
提交
取消