如何在表达式的第一次出现之间删除字符?

时间:2014-08-24 13:04:57

标签: python regex

我会用一个例子来解释我想要的东西。我正在研究DNA序列。假设我要删除字符串中GUACAG(包括GUACAG)之间的所有内容。因此,如果输入为:"AAAAGUAGGGGCAGCAGUUUUUGUAAAAACAG"

输出应为:["AAAA","CAGUUUUU"]。我最初使用re.split(r'GUA\w*CAG',a),但返回["AAAA"]。它似乎在字符串中查找CAG的最后一次出现而不是第一次出现。

2 个答案:

答案 0 :(得分:2)

在正则表达式中,默认情况下*+?greedy

如果您不想要这种行为,请使用他们的非贪婪对手*?+???

re.split(r'GUA\w*?CAG',a)

请参阅https://docs.python.org/2/library/re.html#regular-expression-syntax

答案 1 :(得分:0)

您需要添加量词?,并且最好使用.*?代替\w*?,因为\w仅匹配字词charcters。

>>> import re
>>> s = "AAAAGUAGGGGCAGCAGUUUUUGUAAAAACAG"
>>> m = re.split(r'GUA.*?CAG', s)
>>> m
['AAAA', 'CAGUUUUU', '']
>>> [x for x in m if x]
['AAAA', 'CAGUUUUU']