2016-12-24 74 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

相关问题