与模式部分匹配
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
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