2012-02-21 14 views
1

正規表現を実行する3つのフォームがありますが、それらをすべて一致させたいと思います。文字列にオプションのテキストを持つPythonの正規表現

text1 
text1 text2 
text1 text2 ;text3 

私はこれまで(.*?)(?:\s)(.*)'text1 text2'のために働いてんだが、セミコロンが存在している場合、私は可能なすべての3つのケースを処理します。何か案は?

+0

希望する一致するテキストは実際にはtext1、text2、text3ではありません。あなたは、一致するテキストフォームについてのより多くの説明を与えることができますか? – macduff

答えて

5

以下は、それはまた、正しいグループに「テキスト1」、「テキスト2」、および「テキスト3」をかけることになり、動作するはずです:

^(.+?)(?:\s(.*?)(?:\s;(.*))?)?$ 

それは作業を参照してください:ここで

http://www.rubular.com/r/IyPyF3wXLxが説明です:

^    # start of string 
(.+?)   # put text1 in group 1 
(?:    # start an optional non-capturing group 
    \s(.*?)  # space followed by text2, put text2 in group 2 
    (?:   # start an optional non-capturing group 
    \s;(.*)  # space and semicolon, followed by text3, put text3 in group 3 
)?    # end of optional non-capturing group 
)?    # end of optional non-capturing group 
$    # end of string 

真ん中のオプションのグループは、彼らが存在している場合は、あなたの正規表現は、テキスト2とテキスト3を一致させることができますが、そうでない場合は、まだ一致しています。