단순 정규식 일치가 작동하지 않습니다.

단순 정규식 일치가 작동하지 않습니다.

아래 데이터가 있고 다음 정규식 각각을 사용하여 제목을 구문 분석하려고 합니다. 일부 항목에는 (연도)가 있거나 다른 항목에는 없습니다. 데이터베이스 번호와 동일합니다. 다른 결과가 나올 것 같습니다.

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가 모두 있는 행의 연도 부분을 소비하게 됩니다.

관련 정보