我会用一个例子来解释我想要的东西。我正在研究DNA序列。假设我要删除字符串中GUA
和CAG
(包括GUA
和CAG
)之间的所有内容。因此,如果输入为:"AAAAGUAGGGGCAGCAGUUUUUGUAAAAACAG"
输出应为:["AAAA","CAGUUUUU"]
。我最初使用re.split(r'GUA\w*CAG',a)
,但返回["AAAA"]
。它似乎在字符串中查找CAG
的最后一次出现而不是第一次出现。
答案 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']