在python中使用正则表达式在lin中查找两个字符串

2024-06-09 12:49:21 发布

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

我只需要知道如何在文件的一行中搜索两个字符串。在

例:我需要这一行包括“蛋白质编码”和“外显子”。 如果它真的包括它们,我将打印每行的某些列。我知道如何打印它们,但不知道如何使用regex搜索两个字符串。 提前谢谢你。在

这是对的吗?: 如果重新匹配(“蛋白质编码”和“外显子”行:


Tags: 文件字符串编码蛋白质regex外显子
3条回答

这个正则表达式将匹配具有“protein_nucoding”和“exon”字符串的行。在

^.*?\bprotein_coding\b.*?\bexon\b.*$

DEMO

^{pr2}$

使用锚定和前瞻性断言:

>>> re.findall(r'(?m)^(?=.*protein_coding)(?=.*exon).+$', data)

inline (?m)修饰符启用多行模式。这里使用lookahead匹配两个子字符串,而不管它们的顺序如何。在

Live Demo

如果测试字符串不需要使用正则表达式,那么还可以使用Python的字符串函数和in

>>> line='protein_coding other stuff exon more stuff'
>>> "protein_coding" in line and "exon" in line
True

或者,如果要测试任意数量的单词,请使用all和目标单词的元组来测试:

^{pr2}$

如果匹配项需要正则表达式,并且您希望限制为多个不相关的正则表达式,请使用all和理解来测试:

>>> p1=re.compile(r'\b[a-z]+_coding\b')
>>> p2=re.compile(r'\bexon\b')
>>> li=[p.search(line) for p in [p1, p2]]
>>> li
[<_sre.SRE_Match object at 0x10856d988>, <_sre.SRE_Match object at 0x10856d9f0>]
>>> all(e for e in li)
True 

相关问题 更多 >