如何解决Java正则表达式用下划线替换字符串中的所有特殊字符,同时考虑删除前导,后缀,多个下划线
我需要一个正则表达式来将所有考虑多个的特殊字符替换为单个下划线,并且如果String包含尾部和前导特殊字符,则不添加尾部和前导下划线,我已经尝试了以下方法,但没有似乎有效。
String myDefaultString = "_@##%Default__$*_123_"
myDefaultString.replaceAll("[\\p{Punct}&&[^_]]","_")
我的最终结果应该是Default_123
,其中正则表达式需要考虑前导下划线并将其删除,以使下划线保持在Default
和123
之间,但也应删除后缀和多个下划线在字符串之间。
还尝试了以下正则表达式
myDefaultString.replaceAll("[^a-zA-Z0-9_.]+","_")
但是似乎没有用,我要实现的目标是非常复杂还是有更好的方法呢?
解决方法
您可以在replaceAll
中使用此正则表达式:
String str = "_@##%Default__$*_123_";
str = str.replaceAll("[\\p{Punct}&&[^_]]+|^_+|\\p{Punct}+(?=_|$)","");
//=> "Default_123"
RegEx详细信息:
-
[\\p{Punct}&&[^_]]+
:匹配不是_
的1个标点符号 -
|
:或 -
^_+
:在开始时匹配下划线1个以上 -
|
:或 -
\\p{Punct}+(?=_|$)
:如果后面有_
或字符串结尾,则匹配1+个标点符号。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。