単純正規表現の一致は機能しません。

単純正規表現の一致は機能しません。

以下のデータがあり、次の正規表現のそれぞれを使用してタイトルを解析しようとしています。一部の項目には(年)があるか、他の項目にはありません。データベース番号と同じです。他の結果が出るようです。

https://regex101.com/r/lS9fQ2/2

(.*) every character until a "_(" (space open parenthesis) or "-tt" (dash tt) is found

    (.*)\s\(|\-tt
    (.*)(\s\(|\-tt)

データ

Minions 2-tt2293640
Minions 2 (2012)-tt2293640
Chappie (2015)
Peanuts Movie, The (2015)
Batman Bad Blood (2016)-tt4870838
Ant-Man (2015)-tt0478970
22 Jump Street (2014)-tt2294449
Bean (1997)
Bedtime Stories (2008)
Begin Again (2013)
Beneath the Planet of the Apes (1970)
Best of Me, The (2014)
Beverly Hills Cop (1984)
Beverly Hills Cop II (1987)
Beverly Hills Cop III (1994)
Big Hero 6 (2014)
Big Short, The-tt1596363
Birdman (2014)
Biutiful (2010)
Black Book (2006)
Blackhat (2015)-tt2717822
Black Hawk Down (2001)
Black Mass (2015)-tt1355683
Black Swan (2010)
Blade Runner (1982)-tt0083658
Blended (2014)
Blood Ties (2013)
Body Of Lies (2008)
Bolt (2008)
Born To Be Wild (2011)

私が何を見逃しているのか知っている人はいますか?

ベストアンサー1

正規表現エンジンを使用するとperl(使用中のエンジンを指定しない)、次の方法でこれを達成できます。

perl -pe 's/^(.*?)( \(|-tt).*/\1/' < indata.txt

秘密は、最初の.*一致をnon-greedyにすることです.*?。それ以外の場合は、年と-tt IDの両方がある行の年の部分を消費します。

おすすめ記事