Java正则表达式用下划线替换字符串中的所有特殊字符,还考虑删除前导、尾随、多个下划线

San*_*gli 1 java regex replaceall

我需要一个正则表达式来替换所有特殊字符,考虑用单个下划线考虑多个,并且如果字符串包含尾随和前导特殊字符,也不要添加尾随和前导下划线,我已经尝试了以下方法,但它似乎不起作用。

String myDefaultString = "_@##%Default__$*_123_"
myDefaultString.replaceAll("[\\p{Punct}&&[^_]]", "_")
Run Code Online (Sandbox Code Playgroud)

我的最终结果应该是Default_123正则表达式需要考虑前导下划线并删除它们,将下划线保留在中间Default,而且123还应该删除字符串之间的尾随和多个下划线。

还尝试了以下正则表达式

myDefaultString.replaceAll("[^a-zA-Z0-9_.]+", "_")
Run Code Online (Sandbox Code Playgroud)

但似乎不起作用,我想要实现的目标是否非常复杂,或者有更好的方法吗?

anu*_*ava 5

您可以在以下位置使用此正则表达式replaceAll

String str = "_@##%Default__$*_123_";
str = str.replaceAll("[\\p{Punct}&&[^_]]+|^_+|\\p{Punct}+(?=_|$)", "");
//=> "Default_123"
Run Code Online (Sandbox Code Playgroud)

正则表达式演示

正则表达式详细信息:

  • [\\p{Punct}&&[^_]]+: 匹配1+个不存在的标点符号_
  • |: 或者
  • ^_+:在开头匹配 1 个以上下划线
  • |: 或者
  • \\p{Punct}+(?=_|$):匹配 1 个以上标点符号(如果后面跟有_字符串或结尾)。