我有一个字符串:
s = ".,-2gg,,,-2gg,-2gg,,,-2gg,,,,,,,,t,-2gg,,,,,,-2gg,t,,-1gtt,,,,,,,,,-1gt,-3ggg"
以及我使用的正则表达式
import re
delre = re.compile('-[0-9]+[ACGTNacgtn]+') #this is almost correct
print (delre.findall(s))
返回:
['-2gg', '-2gg', '-2gg', '-2gg', '-2gg', '-2gg', '-1gtt', '-1gt', '-3ggg']
但-1gtt
和-1gt
并不是所需的匹配。在这种情况下,整数定义要匹配多少个后续字符,因此这两个匹配的所需输出分别为-1g
和-1g
。
有没有办法抓取破折号后的整数并动态定义正则表达式,以便它匹配那么多且只匹配那么多后续字符?
还有一个替代解决方案,使用
re.sub
它无需循环:输出:
或者如果您希望以数组形式输出,则使用:
您不能直接使用正则表达式模式执行此操作,但可以使用捕获组来分隔匹配的整数和字符部分,然后将字符部分修剪为适当的长度。
这将打印
您很可能想要做一些除此之外的事情
print
,但您可以根据需要格式化匹配的字符串!注意:如果整数后跟的匹配字符数少于
-10agcta
其指定的字符数,则此操作会失败,例如,即使它只包含 5 个字符,仍然匹配。