与模式部分匹配

Partial matching with a pattern

python 中有没有办法在单词和通用模式(正则表达式)之间执行部分匹配?

目的是了解单词与给定模式的距离,例如一个单词与AB123CD格式的车牌图案的距离,所以两个字母,三个数字和两个字母再次用其正则表达式表示。

例子: -单词 DF345EE 与模式完全匹配。

-D345EE这个词会匹配开头多一个字母

-如果 'C' 是数字,则 DFC45EE 将匹配。

我一直在寻找模糊匹配,但它通常用于在另一个表达式中搜索单词。

谢谢!

regex个支持模糊匹配的模块,需要一次pip install regex。在下一个代码中,{e<=2} 表示最多 2 个任何类型的错误(替换、插入、删除)。

e 表示任何错误,s 是替换计数,i 插入,d 删除,您可以提供复杂的组合,如 {1<=s<=2,2<i<=4,3<=d<6}

# Needs: python -m pip install regex
import regex as re

r = r'(?:[A-Z]{2}\d{3}[A-Z]{2}){e<=2}'

for s in [
    'DF345EE',
    'D345EE',
    'DFC45EE',
]:
    m = re.fullmatch(r, s)
    print(m, '\n', f'{m.fuzzy_counts[0]} substitutions, {m.fuzzy_counts[1]} insertions, {m.fuzzy_counts[2]} deletions')

输出:

<regex.Match object; span=(0, 7), match='DF345EE'>
 0 substitutions, 0 insertions, 0 deletions
<regex.Match object; span=(0, 6), match='D345EE', fuzzy_counts=(1, 0, 1)>
 1 substitutions, 0 insertions, 1 deletions
<regex.Match object; span=(0, 7), match='DFC45EE', fuzzy_counts=(1, 0, 0)>
 1 substitutions, 0 insertions, 0 deletions