gpt4 book ai didi

python - 模糊正则表达式 : fuzzy count for substitution is always 1

转载 作者:行者123 更新时间:2023-12-04 02:26:45 26 4
gpt4 key购买 nike

我正在使用 Python 正则表达式模块进行近似字符串匹配。我有一个 DNA 序列,我想搜索一个特定的模式,同时允许最多 1 个替换:{s<=1}。在 DNA 序列中,可以接受多种模式。例如,前三个字符可以是“GAG”或“GAT”,同样的原则也适用于 DNA 序列的其余部分。

我在下面做了一个例子,我想在一个 9 个字符长的字符串上使用正则表达式搜索。据我了解,该模式应与字符串匹配,无需任何替换。

但是,正则表达式为我提供了模糊计数为 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'>

我的问题是:我在模式创建中做错了什么?还是我误解了模糊计数的工作原理?欢迎任何提示或改进。

最佳答案

来自正则表达式模块文档:

By default, fuzzy matching searches for the first match that meets thegiven constraints.

在您的情况下,第一个匹配项是使用 GAG 并执行一次替换获得的(因为 GAGGAT 之前尝试)。您可以使用 BESTMATCH 标志来寻找最佳匹配:

import regex

dna_patt = regex.compile("((GAG|GAT)(TCT|GAA)(GCC|GGG|GGT)){s<=1}", regex.BESTMATCH)
sequence = "GATGAAGGG"

print(dna_patt.search(sequence))

它给出:

<regex.Match object; span=(0, 9), match='GATGAAGGG'>

关于python - 模糊正则表达式 : fuzzy count for substitution is always 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67046514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com