正则表达式以匹配包含混合大写字母和的字符串\n

2024-04-25 10:26:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我想编写一个正则表达式,它只在字符串以\n开头、至少以一个大写字母继续并以\n结尾时才匹配该字符串。该字符串可以包含此模式的重复,例如:

\n[A-Z]\n[A-Z]\n

我在这个输入上尝试了以下正则表达式:\n(([A-Z]+\n)+):

200LA 012F5421F2E8A172 164 XRAY 1.950 0.176 NA no Endolysin [Enterobacteria phage T4] ||1C63A 1C64A 1C65A MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLNAAKSELDKAIGRNTNGVITKDEAEKLFNQDVDAAVRGILR NAKLKPVYDSLDAVRRAALINMVFQMGETGVAGFTNSLRMAQQKRWDEAAVNLAKSRWYNQTPNRAKRVITTFRTGTWDA YKNL

我希望得到这样的结果: ('mnifemlridegrlkiykdtegytigighlltltkspslnaakseldkaigrngtngvitkdeaeklfnqdvdaavrgrirnakpkpvydsldavrralinmvfqmgetgvagftnslrmaqkrwdeaavnlaksrwynqtpnrakrvittfrtgtwdayknl')

但是我得到了这个: ('mnifemlridegrlkiykdtegytigighllltkspslnaakseldkaigrnngvitkdeaeklfnqdvdaavrgillr\nnaklkpvydsldavrraalinmvqqmgetgvagftnslrmaqkrwdeaavnlaksrwynqtpnrakrvittfrtgtwda\nYKNL\n','YKNL\n')

有人知道哪里出了问题吗?你知道吗

谢谢!你知道吗


1条回答
网友
1楼 · 发布于 2024-04-25 10:26:03

您的正则表达式匹配与您的条件匹配的第一节(可能的最长版本)。你知道吗

文本中的第一行不是以\n开头的,因此它会移动到第一行\n之后的行,因为它与条件匹配,所以regex指定的组会被接受。你知道吗

对于您的结果,我建议使用\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'

相关问题 更多 >

    热门问题