我会用一个例子来解释我想要的。我在研究DNA序列。假设我想在字符串中删除GUA和CAG(包括GUA和CAG)之间的所有内容。所以如果输入是:"AAAAGUAGGGGCAGCAGUUUUUGUAAAAACAG"
输出应该是:["AAAA","CAGUUUUU"]。我最初使用的是re.split(r'GUA\w*CAG',a),但返回的是["AAAA"]。它似乎是查找字符串中CAG的最后一次出现,而不是第一次出现。
发布于 2014-08-24 13:08:43
在regex中,默认情况下,*、+和?是greedy。
如果你不想那样做,使用他们的非贪婪的对应者*?,+?和??。
re.split(r'GUA\w*?CAG',a)请参阅https://docs.python.org/2/library/re.html#regular-expression-syntax
发布于 2014-08-24 13:12:43
您需要添加一个量词?,而且最好使用.*?而不是\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']https://stackoverflow.com/questions/25472003
复制相似问题