some-string-test-moretext.csv
我想提取字符串test
,它总是在第2个和第3个-
分隔符之后找到。
表达式[-](.*?)[-]
将匹配-string-
。所以它可能很接近,但我怎样才能进入下一场比赛?
如果重要,我正在使用java
。
答案 0 :(得分:4)
如果您事先知道分隔符的数量,则可以拆分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
答案 1 :(得分:1)
答案 2 :(得分:0)
我建议使用正则表达式,非常简短:
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];
答案 3 :(得分:0)
在sed
:
$ echo 'some-string-test-moretext.csv' | sed 's/[^-]*-[^-]*-\([^-]*\)-.*/\1/'
test
[^-]*
表示&#34;除了&#34; - &#34;之外的任何char的零次或多次出现。让我们称之为&#34; notHyphen&#34;。因此,我们会在notHyphen-notHyphen-\(notHyphen\)-.*
上进行匹配,并将整个匹配项替换为\1
,即\(\)
捕获的内容。
在Java中,您不需要将(
转义为\(
,并且从捕获组中提取的技术也不同:
Pattern patt = Pattern.compile("[^-]*-[^-]*-([^-]*)-.*");
Matcher m = patt.matcher(filename);
String extracted = null;
if (m.matches()) {
extracted = m.group(1);
}