2016-08-13 12 views
1

私の正規表現は今日弱いです。私は単語の境界が、なしの成功を使用してみました正規表現をグループに分割

substring delimiter substring number(space) substring 

:私はフォーマットと5つの部分に、文字列内のグループを捕獲しようとしています。私は*を使用に頼ってきたすべての

で動作していないより少し優れている(私が知っている、貪欲と怠惰は)ここで私が持っているものです:。それを取得するので

import re 

s = "FOREVER - Alabaster Cuttlefish - 01 This Style Is Cheese" 

m = re.compile("(.*)(\s-\s)(\d{1,3}\s)(.*)") 
g = m.match(s) 
if g: 
    print m.match(s).group(1) # FOREVER 
    print m.match(s).group(2) # - 
    print m.match(s).group(3) # Alabaster Cuttlefish 
    print m.match(s).group(4) # 01 

    # fail 
    # print m.match(s).group(5) # This Style Is Cheese 

グループ5は存在しません。最初のグループでキャプチャします。それゆえ私の困惑。

答えて

2

あなたは非常に近いです。正規表現に置き換え:あなたはアラバスターイカの末尾にダッシュをしたくない場合は、

m = re.compile("(.*?)(\s-\s)([^\d]*)(\d{1,3}\s)(.*)") 

を使用:

import re 

s = "FOREVER - Alabaster Cuttlefish - 01 This Style Is Cheese" 

m = re.compile("(.*)(\s-\s)(.*)(\s-\s)(\d{1,3}\s)(.*)") 
g = m.search(s) 
if g: 
    print g.group(1) # FOREVER 
    print g.group(2) # - 
    print g.group(3) # Alabaster Cuttlefish 
    print g.group(5) # 01 
    print g.group(6) # This Style Is Cheese