簡體   English   中英

如何在兩個相同的定界符之間匹配字符串?

[英]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

這應該給您一個很好的開始:

[^-]+-[^-]+-(.*?)-[^-]+\\.csv

https://regex101.com/r/YjWDkv/1

我會建議使用正則表達式,而且很簡短:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM