<p>你的错误是假设“错误”和“替换”是同一回事,而事实并非如此。在</p>
<p><a href="https://pypi.org/project/regex/" rel="nofollow noreferrer">^{<cd1>}</a>包的模糊匹配可以理解三种错误——插入、删除和替换。使用<code>e</code>指定的错误距离可以由这些错误的任意组合组成。而<code>ATAGGAGAAGATGATGTATA</code>只需两个这样的操作(1个删除和1个插入)就可以被编辑成{<cd4>},如下面的序列比对所示:</p>
<pre><code>ATAGGAG-AAGATGATGTATA
ATAG-AGCAAGATGATGTATA
</code></pre>
<blockquote>
<p>is there any way of getting this to find only strings within the Hamming 2-ball of the given pattern?</p>
</blockquote>
<p>是的。注意,<a href="https://en.wikipedia.org/wiki/Hamming_distance" rel="nofollow noreferrer">Hamming distance</a>是一种编辑距离,它测量将一个字符串编辑到另一个长度相等的字符串所需的最小替换次数。因此,要只匹配模式的Hamming 2-ball中的字符串,我们需要告诉<code>regex</code>匹配2<em>替换</em>中的任何内容,这可以通过使用<code>s</code>错误类型而不是<code>e</code>:</p>
^{pr2}$
<blockquote>
<p>Is it possible that a swap of letters is considered to be only one change?</p>
</blockquote>
<p>不在当前的<code>regex</code>包中。两个字符“交换”的标准术语是“换位”。作为可能的编辑(例如<a href="https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance" rel="nofollow noreferrer">Dameau-Levenshtein distance</a>,其中编辑可以是插入、替换、删除或相邻字符的转置)的编辑距离确实存在,并且对于某些应用程序(例如,打字错误更正)是有用的。然而,在编写本文时,<code>regex</code>包中的模糊匹配根本不支持它们。在</p>