python中是否有一种方法可以在单词和通用模式(正则表达式)之间进行部分匹配?
目的是了解单词与给定模式(例如,单词与AB123CD格式的车牌图案之间的距离,因此两个字母,三个数字和两个字母再次由其正则表达式表示。
示例: -单词DF345EE与模式完全匹配。
-D345EE这个词的开头会再匹配一个字母
-如果“ C”是数字,则单词DFC45EE将匹配。
我一直在寻找模糊匹配,但通常用于搜索另一个表达式中的单词。
谢谢!
答案 0 :(得分:0)
有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