簡體   English   中英

Perl:幫助編寫正則表達式

[英]Perl: Help writing a regular expression

我正在嘗試為以下3種情況編寫一個通用的正則表達式:

  • 邪惡力量_S07E23_720p_HDTV_X264-DIMENSION.mkv
  • 聽眾313.480p.hdtv.x264-2hd.mkv
  • 我如何與您的母親相伴s02e07.hdtv.x264-xor.avi

現在我的例行表達應從原始字符串中刪除系列名稱,即上述字符串的輸出為:

  • S07E23_720p_HDTV_X264-DIMENSION.mkv
  • 313.480p.hdtv.x264-2hd.mkv
  • s02e07.hdtv.x264-xor.avi

現在,對於supernatural string的基本情況,我編寫了以下正則表達式,它可以正常工作,但是一旦系列名稱得到多個單詞,它就會失敗。

$string =~ s/^(.*?)[\.\_\- ]//i; #delimiter can be (. - _ )

因此,我不知道如何針對\\w+{1,6}上述情況繼續進行處理,但是它也無法滿足要求。

PS:對正則表達式在做什么的解釋將不勝感激。

您可以檢測。的下一個標記是否包含數字,如果沒有,則將其視為名稱的一部分。

但是,我個人認為沒有完美的解決方案。 它仍然會遇到類似以下問題:

24.313.480p.hdtv.x264-2hd.mkv            // 24
Warehouse.13.s02e07.hdtv.x264-xor.avi    // warehouse 13

正如StanleyZ所說的那樣,您總是會遇到包含數字的名稱的麻煩。

但是,如果您采取這些特殊情況,可以嘗試:

#perl

$\=$/;

map {

    if (/^([\w\.]+)[\.\_]([SE\d]+[\.\_].*)$/i) {
        print "Match : Name='$1'        Suffix='$2'";
    } else {
        print "Did not match $_";
    }
}
qw!
    Supernatural_S07E23_720p_HDTV_X264-DIMENSION.mkv
    the.listener.313.480p.hdtv.x264-2hd.mkv
    How.I.met.your.mother.s02e07.hdtv.x264-xor.avi
  !;

輸出:

Match : Name='Supernatural'     Suffix='S07E23_720p_HDTV_X264-DIMENSION.mkv'
Match : Name='the.listener'     Suffix='313.480p.hdtv.x264-2hd.mkv'
Match : Name='How.I.met.your.mother'     Suffix='s02e07.hdtv.x264-xor.avi'

注意:您不是在做違法的事嗎? ;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM