0

文字列の一部のみを返す正規表現を作成するのに苦労しています。

次の文字列を渡します。

/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
4

3 に答える 3

0

にとっては簡単な仕事のようですawk。chars_または(で行をフィールドに分割するため、名前は 2 番目になり、そのフィールドの先頭と末尾のスペースが削除されます。

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
于 2012-07-18T22:25:23.987 に答える
0

PCRE と正の後読みを使用する

PCRE 式をサポートする正規表現エンジンにアクセスできる場合は、肯定的な後読みを使用して、MP3 リストから必要なテキストだけを取得できます。例えば:

pcregrep -o '(?<=_ )([^(]+)' /tmp/foo

セドを使う

Perl 互換の grep がない場合は、代わりに sed を使用できます。可読性ははるかに低くなりますが、移植性ははるかに高くなります。例えば:

sed 's/.*_ \([^(]\+\).*/\1/' /tmp/foo
于 2012-07-18T22:26:31.007 に答える
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]);
}​

http://jsfiddle.net/g8zPv/

于 2012-07-18T22:27:59.897 に答える