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)
但似乎不起作用,我想要实现的目标是否非常复杂,或者有更好的方法吗?
您可以在以下位置使用此正则表达式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 个以上标点符号(如果后面跟有_字符串或结尾)。