2016-12-24 177 views
1

我想寫一個正則表達式將匹配字符串,只有當它與\ n開頭的字符串,繼續與至少一個大寫字母,並用\ n結束。字符串可能包含這個模式的重複,例如:正則表達式匹配混合大寫字母和 n

\ n [A-Z] \ n上[A-Z] \ n上。

我試圖此正則表達式:\ N(([AZ] + \ n)的+),在這個輸入:

200LA 012F5421F2E8A172 164 XRAY 1.950 0.176 NA無細胞內溶素[腸桿菌噬菌體T4] || 1C63A 1C64A 1C65A MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLNAAKSELDKAIGRNTNGVITKDEAEKLFNQDVDAAVRGILR NAKLKPVYDSLDAVRRAALINMVFQMGETGVAGFTNSLRMAQQKRWDEAAVNLAKSRWYNQTPNRAKRVITTFRTGTWDA YKNL

我希望得到這樣的結果: ('MNIFEMLRIDEGLRL KIYKDTEGYYTIGIGHLLTKSPSLNAAKSELDKAIGRNTNGVITKDEAEKLFNQDVDAAVRGILRNAKLKPVYDSLDAVRRAALINMVFQMGETGVAGFTNSLRMAQQKRWDEAAVNLAKSRWYNQTPNRAKRVITTFRTGTWDAYKNL ')

,而是,我得到了這一個: (' MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLNAAKSELDKAIGRNTNGVITKDEAEKLFNQDVDAAVRGILR \ nNAKLKPVYDSLDAVRRAALINMVFQMGETGVAGFTNSLRMAQQKRWDEAAVNLAKSRWYNQTPNRAKRVITTFRTGTWDA \ nYKNL \ n」, 'YKNL \ n')

有誰知道哪裏出了問題?

謝謝!

+0

爲什麼你預期第一個結果,因爲我看不到一個方法來得到那一個。 –

回答

0

你的正則表達式的第一部分符合你的條件(的最長的版本)相匹配。

在文本中的第一行不以\n啓動,以便將其移動到看行第一\n之後,由於它的條件匹配,通過你的正則表達式指定的組接受的結果。

你的結果,我會建議用\n(?:[A-Z]+\n)+?:代表非捕獲組,以防止沒有,但在最後一組中捕獲),然後用空字符串保換換行符匹配:

>>> a = """>200LA 012F5421F2E8A172 164 XRAY 1.950 0.176 NA no Endolysin <ENLYS_BPT4(1-164)> [Enterobacteria phage T4] ||1C63A 1C64A 1C65A 
... MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLNAAKSELDKAIGRNTNGVITKDEAEKLFNQDVDAAVRGILR 
... NAKLKPVYDSLDAVRRAALINMVFQMGETGVAGFTNSLRMAQQKRWDEAAVNLAKSRWYNQTPNRAKRVITTFRTGTWDA 
... YKNL 
... """ 
>>> m = re.findall('\n(?:[A-Z]+\n)+', a) 
>>> m[0].replace('\n', '') 
'MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLNAAKSELDKAIGRNTNGVITKDEAEKLFNQDVDAAVRGILRNAKLKPVYDSLDAVRRAALINMVFQMGETGVAGFTNSLRMAQQKRWDEAAVNLAKSRWYNQTPNRAKRVITTFRTGTWDAYKNL' 
+0

謝謝,這真是幫了! – adibc

相關問題