我使用Python正则表达式模块进行近似字符串匹配。我有一个DNA序列,我想搜索一个特定的模式,同时允许最多1个替换:{s<;=1}。在DNA序列中,多种模式是可以接受的。例如,前三个字符可以是“GAG”或“GAT”,同样的原理适用于其余的DNA序列
我在下面举了一个例子,我想在一个9个字符长的字符串上使用正则表达式搜索。据我所知,模式应该与字符串匹配,而不进行任何替换
然而,regex给了我一个模糊计数为1的替换匹配(见下文)。我不明白这一点,因为序列与模式匹配
import regex
dna_patt = regex.compile("((GAG|GAT)(TCT|GAA)(GCC|GGG|GGT)){s<=1}")
sequence = "GATGAAGGG"
print(dna_patt.search(sequence))
<regex.Match object; span=(0, 9), match='GATGAAGGG', fuzzy_counts=(1, 0, 0)>
当我不再为这三个字符设置多个选项时,这个问题就不再发生了
dna_patt = regex.compile("(GATGAAGGG){s<=1}")
print(dna_patt.search(sequence))
<regex.Match object; span=(0, 9), match='GATGAAGGG'>
我的问题是:我在创建模式时做错了什么?还是我误解了模糊计数的工作原理?欢迎提供任何提示或改进
从regex模块文档中:
在您的例子中,第一个匹配是使用
GAG
并执行一次替换来获得的(因为GAG
在GAT
之前进行了尝试)。您可以使用BESTMATCH
标志来查找最佳匹配:它给出:
您还可以使用字符类将
G
或T
与GA[GT]
匹配,以便第一次找到GAT如果以后不需要捕获组,可以使用
(?:
使它们成为非捕获组结果
Python demo
相关问题 更多 >
编程相关推荐