[英]regular expression that starts with an underscore but not contains any underscore
我試圖從最后一個下划線獲取文件的名稱,直到結束。
例如, ABC_AA.xml
應為ABC
, ABC_AASD_AD_AA.xml
應為ABC_AASD_AD
我正在考慮使用非貪婪的exlusive ^
符號。 我試過這個:
String nameToSearch = testName.replaceAll("_(^(_).)+\\.xml$", "");
如何使用簡單的子串而不是正則表達式
String nameToSearch = testName.substring(0, testName.lastIndexOf('_'));
或者如果沒有_
你可以使用
String noSuffix = testName.substring(0, testName.lastIndexOf('.'));//remove ".xml"
String nameToSearch = noSuffix.substring(0, testName.lastIndexOf('_'));
但如果你真的想使用正則表達式,那么你可以試試
testName.replaceAll("_[^_]*[.]xml$", "");
它將匹配(並刪除) _
具有零個或多個非_
字符[^_]*
並以.xml
結尾。
如果沒有_
你可以使用_[^_]*
可選
testName.replaceAll("(_[^_]*)?[.]xml$", "");
簡單。
使用組和反向引用,如下所示:
String input = "ABC_AASD_AD_AA.xml";
// | using replaceAll to pass regex
// | | group 1: one or more characters, greedy
// | | | underscore
// | | || one or more characters, reluctant
// | | || | escaped dot and extension
// | | || | | back-reference to group 1
System.out.println(input.replaceAll("(.+)_.+?\\.xml", "$1"));
產量
ABC_AASD_AD
注意
任何不符合Pattern
輸入都將被退回。
我相信這個正則表達式應該有效:
String repl = str.replaceFirst("_[^_]+$", "");
^
字符可以用作“獨占”,即排除某些字符, 僅作為[]
內字符類的第一個字符。 [^_]
匹配任何不是下划線的字符。 在方括號之外,它表示“源字符串的開頭”。
所以你很親密。 嘗試這個:
String nameToSearch = testName.replaceAll("_[^_]+\\.xml$", "");
或者,如果要處理以下划線結尾的文件名( ABC_.XML
更改為ABC
),並在該情況下刪除下划線,請將+
(1或更多)更改為*
(0或更多)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.