我正在制作一个工具来寻找氨基酸的开放阅读框作为个人项目。我有很多字符串,其中的字符由26个大写英文字母(A到Z)组成。它们看起来像这样:
GMGMGRZMQGGRZR
我希望找到字母M
和Z
之间的所有可能匹配,以及其他一些规则。
Z
和M
之间不应该有Z
个EMAZAZ
MAZ
是输入字符串,那么MAZAZ
应该匹配,M
不应该M
和Z
之间可以有多个GMGMGRZMQGGRZR
个MGMGRZ
MGRZ
,则M
应该匹配,但M
不应该匹配,因为之前还有MGRZ
个GMGMGRZMQGGRZR
MGMGRZ
中可用于匹配的第一个MQGGRZ
。使用上述字符串(MGMGRZMQGGRZ
),只有MGRZ
和MGRZAMQGGRZ
匹配。 <{1}},M((?!(Z)))*Z
和MGMGRZ
不应匹配。
有谁知道如何构建这样的正则表达式?我查阅了一些Java正则表达式教程(我使用Java编写这个程序),但无法提出遵循上述所有规则的正则表达式。
我得到的最接近的是这个正则表达式:
MQGGRZ
它表明子字符串MGRZ
,MGRZ
和{{1}}匹配。但是,我不希望{{1}}匹配。
答案 0 :(得分:1)
你想要的是:
(M[^Z]+Z)
正则表达式的工作原理如下:它会尝试匹配M
,然后匹配任意数量的非Z
到Z
的字符
问题是每个char只从左到右消耗一次,所以在
中GMGMGRZMQGGRZR
^----^ 1st match MGMGRZ
^----^ 2nd match MQGGRZ
因此,如果您将其单独提供给正则表达式,它将匹配MGRZ