1-mismatch正则表达式

时间:2012-02-21 01:16:53

标签: python regex

  

可能重复:
  Search for string allowing for one mismatch in any location of the string

我获得了一个字符串s和一个字符串t。是否有正则表达式可以在t内找到s的所有t,其中最多只有一个不匹配的字符。 (最多允许{{1}}中的一个字符被另一个字符替换。)

2 个答案:

答案 0 :(得分:1)

是的,绝对的。例如,如果t"abcde",那么一个这样的正则表达式就是

.bcde|a.cde|ab.de|abc.e|abcd.

尽管如此,这几乎肯定是这是最好或最有效的方法,尤其是t一点都不大的时候。 (如果它很大,那么你可以通过重新制定它来改善它的性能

.bcde|a(?:.cde|b(?:.de|c(?:.e|d.)))

或者可能是

a(?:b(?:c(?:d.|.e)|.de)|.cde)|.bcde

但它仍然不是最好的方法。)

答案 1 :(得分:1)

我不一定会用正则表达式来做这件事。你可以使用Levenshtein距离。

>>> import Levenshtein
>>> s = "spam ham and eggs"
>>> t = "ram"
>>> for i,_ in enumerate(s): 
...   s_ = s[i:i+len(t)]
...   if Levenshtein.distance(s_, t) == 1:
...     print s_
... 
pam
ham