2013-12-11 156 views
1

我想檢查字符串是否包含標點符號或不是這樣連續的感嘆號,問題&都有。 通過連續,它意味着超過2次。就像下面一樣,字符串由標點符號組成

#If sentence contains !!! 
    exc = re.compile(r"(.)\!{2}") 
    word["cont_exclamation"] = if exc.search(sent[i]) else not(found) 

    #If sentence contains ??? 
    reg = re.compile(r"(.)\?{2}") 
    word["cont_question"] = if reg.search(sent[i]) else not(found) 

但是現在我想找到兩個,感嘆號和問號,例如,你好??!或者嘿!或老兄!?!

另外,如果我想要?和!兩者都超過2個。

我不知道正則表達式,所以任何幫助都會很棒。

+0

簡單'[!] {2}' – georg

回答

2
regex = re.compile(r"(.)(\?|\!){2}") 

編輯:在google中輸入「正則表達式教程」會給出比您可能需要的更多信息。 This tutorial在簡潔性和完整性之間看起來特別平衡。

特別(i.m.o.),其常常沒有提到有用技巧:

  • 使用+?*?從貪婪切換到懶惰匹配。即儘可能少地匹配字符,而不是儘可能地匹配。示例文本:#ab# #de# - >#.*?#匹配#ab#只(未#ab# #de#

  • 括號默認創建捕獲基團。如果你不想要這個,你可以使用(?: ... )

最重要的是,請注意每個正則表達式都帶有可讀的解釋。未來 - 你會很感激。 :-)

+0

這工作就像一個魅力。我將如何即興在正則表達式..任何幫助? – fscore

2

嘗試re.compile(r"(.)[\?\!]{2}")

+0

''''''轉義在這裏是多餘的。 –

+0

如果我想要兩個呢?和!然後? – fscore

3

使用正則表達式 '[!] {3}',這意味着匹配?要麼 !字符3次或更多次(如果連續=超過兩次)。在角色類中不需要引用。

到焦炭類添加更多的標點符號需要

+0

+1解釋它在做什麼。 – neil

+0

如果我想要兩個呢?和!然後? – fscore

+0

這將工作正常()是一個字符類,這意味着任何字符將被匹配。 – Mark

相關問題