gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:45:36 28 4
gpt4 key购买 nike

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

测试字符串是

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

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

  • 删除所有前导非字母字符 – [字符串开头]
  • 删除所有尾随的非字母数字字符 – [字符串结尾]
  • 删除
  • 之间的所有非字母数字字符([_-.]除外)

所以结果会是

my-Cruil_Display.Nam3

问题是内置模式 Alnum 和 alpha 之间的切换,具体取决于字符串中的位置(开始、结束)和它们之间的异常字符 [_-.]。

这几天我尝试了很多次,但我没有让它工作。删除前导非字母字符正在使用正则表达式

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

但是如果我附加“between”,它不会再工作了

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

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

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

最后的尝试之一是

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

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

最佳答案

你可以使用

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

关于Java,正则表达式,去除不需要的字符[尾随,前导,之间],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51651905/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com