2011-08-17 134 views
2

我需要一個python正則表達式,它正好匹配3個大寫字母,後跟一個小寫字母,後面緊跟3個大寫字母。例如,它應該匹配ASDfGHJ而不匹配ASDFgHJK。正則表達式匹配3個大寫字母后跟一個小寫字母后跟3個大寫字母?

+6

搞笑。我只是在查看http://www.pythonchallenge.com的第3部分,並且搜索「python re capital letter」指向此頁面。看起來OP是在試圖欺騙......令人沮喪的是,我仍然不確定如何使用答案來達到第4部分... –

+0

HOme WORK:P:P –

+0

嘗試並專注於整個單詞你找到了結合,而不僅僅是找到一個答案。 – galfisher

回答

17
r'\b[A-Z]{3}[a-z][A-Z]{3}\b' 

這將匹配你貼什麼,如果它是一個完整的詞。

r'(?<![^A-Z])[A-Z]{3}[a-z][A-Z]{3}(?![A-Z])' 

只要沒有其他大寫字母,它就會匹配您發佈的內容。

+0

我爲編輯道歉。這是討厭我=) – katrielalex

+0

哈,沒問題。我經常輸入錯誤的近同音詞,它也困擾我(當我注意到它時)。 – agf

+1

請注意,這將不匹配所有的Unicode大寫字母,例如,它不會匹配'u「Ů」' – Flimm

2

那就是:

'[A-Z]{3}[a-z]{1}[A-Z]{3}' 

編輯 你需要使用單詞邊界也:

r'\b[A-Z]{3}[a-z]{1}[A-Z]{3}\b' 
+3

這將與他的反例「ASDFgHJK」相匹配。另外,'{1}'是不必要的。 – agf

+0

它會匹配ASDFgHJK。我不需要這樣的例子。謝謝您的幫助。 – Nitish

+1

請注意,這將不匹配所有的Unicode大寫字母,例如,它不會匹配'u「Ů」' – Flimm

-1
>>> import re 
>>> pattern = r'^[A-Z]{3}[a-z]{1}[A-z]' 
>>> re.match(pattern , "ABCaABC").start() 
    0 
>>> print re.match(pattern , "ABCABC") 
    None 
>>> print re.match(pattern , "ABCAABC") 
    None 
>>> print re.match(pattern , "ABCAaABC") 
    None 
>>> print re.match(pattern , "ASDFgHJK") 
    None 
>>> print re.match(pattern , "ABCaABC") 
    <_sre.SRE_Match object at 0x011ECF70> 

r'^[A-Z]{3}[a-z]{1}[A-z]'
^ - >啓動資本,所以前三個字母必須是大寫。

+1

您不需要'{1}',他希望小寫字母后跟__exactly__三個大寫字母字母。 – agf

+1

請注意,這不會匹配所有的Unicode大寫字母,例如,它不會匹配'u「Ů」' – Flimm

0
re.findall(r'[a-z][A-Z]{3}([a-z])[A-Z]{3}[a-z]', data) 
+3

雖然這段代碼可能回答這個問題,但最好包含一些上下文,解釋它是如何工作的以及何時使用它。從長遠來看,僅有代碼的答案是沒有用的。 – Bono

+0

re是正則表達式,對於任何其他人來說,所以你必須導入re –

+0

請注意,這將不匹配所有的Unicode大寫字母,例如,它不會匹配'u「Ů」' – Flimm

相關問題