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

Java regex to replace all special characters in a String with an underscore also considering removing leading,trailing,multiple underscores

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

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

我的最终结果应该是 Default_123,其中正则表达式需要考虑前导下划线并删除它们,使下划线保持在 Default123 之间,但也应该删除尾随和多个字符串之间的下划线。

还尝试了以下正则表达式

myDefaultString.replaceAll("[^a-zA-Z0-9_.]+", "_")

但似乎没有用,是我想实现的很复杂还是有更好的方法?

您可以在 replaceAll:

中使用此正则表达式
String str = "_@##%Default__$*_123_";
str = str.replaceAll("[\p{Punct}&&[^_]]+|^_+|\p{Punct}+(?=_|$)", "");
//=> "Default_123"

RegEx Demo

正则表达式详细信息:

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