正则表达式匹配混合大写字母和\ n
我想写一个正则表达式将匹配字符串,只有当它与\ 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')
有谁知道哪里出了问题?
谢谢!
你的正则表达式的第一部分符合你的条件(的最长的版本)相匹配。
在文本中的第一行不以\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'
谢谢,这真是帮了! – adibc
为什么你预期第一个结果,因为我看不到一个方法来得到那一个。 –