我无法创建只返回字符串一部分的正则表达式。
传递以下字符串:
/path/of/the/file/1 - 2 - Lecture 1.2_ Max Bense (13_49).mp4
/path/of/the/file/1 - 3 - Lecture 1.3_ Michael Friedman (12_15).mp4
/path/of/the/file/2 - 1 - Lecture 2.1_ Paul Feyerabend (12_55).mp4
/path/of/the/file/2 - 2 - Lecture 2.2_ Alhazen (11_37).mp4
/path/of/the/file/3 - 2 - Lecture 3.2_ Study Case - Dominicus Gundissalinus (14_30).mp4
/path/of/the/file/3 - 3 - Lecture 3.3_ Study Case - Carl Friedrich von Weizsacker (11_48).mp4
它应该分别只返回以下部分:
Max Bense
Michael Friedman
Paul Feyerabend
Alhazen
Study Case - Dominicus Gundissalinus
Study Case - Carl Friedrich von Weizsacker
答案 0 :(得分:0)
awk
似乎很容易。它使用字符_
或(
拆分字段中的行,因此名称将是第二个,然后删除该字段的前导和尾随空格:
awk '
BEGIN {
FS = "[_(]" ;
}
{
gsub( /^ *| *$/, "", $2 );
print $2 ;
}
' infile
输出:
Max Bense
Michael Friedman
Paul Feyerabend
Alhazen
Study Case - Dominicus Gundissalinus
Study Case - Carl Friedrich von Weizsacker
答案 1 :(得分:0)
如果您可以访问支持PCRE表达式的正则表达式引擎,则可以使用正向lookbehind从MP3列表中获取所需的文本。例如:
pcregrep -o '(?<=_ )([^(]+)' /tmp/foo
如果你没有Perl兼容的grep,那么你可以使用sed代替。它的可读性差得多,但便携性更强。例如:
sed 's/.*_ \([^(]\+\).*/\1/' /tmp/foo
答案 2 :(得分:0)
这是一个JavaScript解决方案:
var files=["/path/of/the/file/1 - 2 - Lecture 1.2_ Max Bense (13_49).mp4",
"/path/of/the/file/1 - 3 - Lecture 1.3_ Michael Friedman (12_15).mp4",
"/path/of/the/file/2 - 1 - Lecture 2.1_ Paul Feyerabend (12_55).mp4",
"/path/of/the/file/2 - 2 - Lecture 2.2_ Alhazen (11_37).mp4",
"/path/of/the/file/3 - 2 - Lecture 3.2_ Study Case - Dominicus Gundissalinus (14_30).mp4",
"/path/of/the/file/3 - 3 - Lecture 3.3_ Study Case - Carl Friedrich von Weizsacker (11_48).mp4"];
var regex=/_\s(.+)\s/;
for (var i = 0; i < files.length; i++) {
console.log(regex.exec(files[i])[1]);
}