2012-02-21 23 views
1

我有三種可能的形式將通過正則表達式,我想將它們全部匹配。正則表達式在字符串中包含可選文本的Python中

text1 
text1 text2 
text1 text2 ;text3 

我已經走到這一步,(.*?)(?:\s)(.*)工作'text1 text2',但我能夠處理所有三種情況下,如果分號存在。有任何想法嗎?

+0

你想要的匹配文本不是真的text1,text2和text3,對不對?你能給出更多的解釋文字形式來匹配嗎? – macduff 2012-02-21 20:58:29

回答

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,但仍然匹配,如果他們不。

相關問題