2017-03-07 5 views
2

Ich erstelle eine Regex, um den chinesischen und englischen Namen des Tv zeigt.Python Regex funktioniert auf Regex101 aber nicht in Python2 arbeiten

Meine Regex befindet sich bei https://regex101.com/r/rBJHDG, es ist Arbeit perfekt auf die Regex, aber diese Regex ist nicht in Python2 arbeiten.

Beispiele, string 亿万.Billions.S01E01.中英字幕.HDTVrip.1024X576.mp4 Die Regex wird paßt nicht 亿万 als name_chs in erwarten, sondern sie paßt 亿万.Billions als name_en.

In [68]: r = '^(?P<name_chs>(?:[\\u3007\\u4e00-\\u9fff\\u3400-\\u4dbf\\uf900-\\ufaff]+)(?=\\.))?(?P<name_en>\\S+).S(?P<season>\\d{2})E(?P<episode>\\d{2})' 

In [69]: re.match(r, u'亿万.Billions.S01E01.中英字幕.HDTVrip.1024X576.mp4').grou 
    ...: pdict() 
Out[69]: 
{'episode': u'01', 
'name_chs': None, 
'name_en': u'\u4ebf\u4e07.Billions', 
'season': u'01'} 

Zweite Frage:

Wie die . in name_en, die zwischen dem chinesischen Namen und englischen Namen zu entfernen.

# 亿万.Billions.S01E01.中英字幕.HDTVrip.1024X576.mp4 
Full match 0-18 `亿万.Billions.S01E01` 
Group `name_chs` 0-2 `亿万` 
Group `name_en` 2-11 `.Billions` <---- This DOT! 
Group `season` 13-15 `01` 
Group `episode` 16-18 `01` 

Antwort

1

Es ist wie das Problem sieht, ist, dass die Regex Tester die global und multiline Flaggen, aber Ihr Code beinhaltet nicht. Wenn Sie diese beiden Flags im Regex-Tester deaktivieren, werden Sie feststellen, dass der Tester Ihren aktuellen Ergebnissen entspricht.

re.search(r, u'亿万.Billions.S01E01.中英字幕.HDTVrip.1024X576.mp4').grou 
    ...: pdict() 

r = '^(?P<name_chs>(?:[\\u3007\\u4e00-\\u9fff\\u3400-\\u4dbf\\uf900-\\ufaff]+)(?=\\.))?(?P<name_en>\\S+).S(?P<season>\\d{2})E(?P<episode>\\d{2})', re.MULTILINE)

und

versuchen Was Ihre zweite Frage

Sie könnten:

würde ich nur das machen dot es eigene Capture-Gruppe ist durch (.) vor dem Englisch Namen addieren, wie so ...

^(?P<name_chs>(?:[\u3007\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff]+)(?=\.))?(.)(?P<name_en>\S+).S(?P<season>\d{2})E(?P<episode>\d{2}) 

Nr w Wenn Sie den englischen Namen drucken, wird nur das Wort verwendet, da der Punkt in seiner eigenen Erfassungsgruppe ist.

Verwandte Themen