![](/img/trans.png)
[英]How to match a string with a regex only if it's between two delimiters?
[英]How to match a string between two same delimiters?
some-string-test-moretext.csv
我想提取字符串test
,它總是在第二和第三后發現-
分隔符。
表達式[-](.*?)[-]
將匹配-string-
。 所以可能已經接近了,但是我該如何進行下一場比賽?
如果那很重要,我正在使用java
。
如果您事先知道分隔符的數量,則可以拆分String
。
String[] test = {
"some-string-test-moretext.csv",
"another-string-test-andthensome.csv"
};
for (String s: test) {
System.out.println(s.split("-")[2]);
}
輸出量
test
test
我會建議使用正則表達式,而且很簡短:
String str = "some-string-test-moretext.csv\n";
Matcher m = Pattern.compile("\\w+-\\w+-(\\w+).*").matcher(str);
String res = m.find() ? m.group(1) : "";
System.out.println(res);
可以肯定String.split()
是另一種方式:
String res = str.split("-")[2];
sed
:
$ echo 'some-string-test-moretext.csv' | sed 's/[^-]*-[^-]*-\([^-]*\)-.*/\1/'
test
[^-]*
表示“除“-”外,任何字符的零個或多個出現。我們稱其為“ notHyphen”。因此,我們在notHyphen-notHyphen-\\(notHyphen\\)-.*
匹配,並將整個匹配項替換為\\1
,即\\(\\)
捕獲的內容。
在Java中,您無需轉義(
到\\(
,並且從捕獲組中提取的技術是不同的:
Pattern patt = Pattern.compile("[^-]*-[^-]*-([^-]*)-.*");
Matcher m = patt.matcher(filename);
String extracted = null;
if (m.matches()) {
extracted = m.group(1);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.