[英]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
,其中正則表達式需要考慮前導下划線並刪除它們,將下划線保留在Default
和123
之間,但也應該刪除字符串之間的尾隨和多個下划線。
還嘗試了以下正則表達式
myDefaultString.replaceAll("[^a-zA-Z0-9_.]+", "_")
但似乎不起作用,是我想要實現的目標非常復雜還是有更好的方法來做到這一點?
您可以在replaceAll
使用此正則表達式:
String str = "_@##%Default__$*_123_";
str = str.replaceAll("[\\p{Punct}&&[^_]]+|^_+|\\p{Punct}+(?=_|$)", "");
//=> "Default_123"
正則表達式詳情:
[\\\\p{Punct}&&[^_]]+
: 匹配 1+ 個不是_
標點字符|
: 或者^_+
: 在開始時匹配 1+ 個下划線|
: 或者\\\\p{Punct}+(?=_|$)
:匹配 1+ 個標點字符,如果后面跟有_
或字符串結尾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.