可能重复:
Search for string allowing for one mismatch in any location of the string
我获得了一个字符串s
和一个字符串t
。是否有正则表达式可以在t
内找到s
的所有t
,其中最多只有一个不匹配的字符。 (最多允许{{1}}中的一个字符被另一个字符替换。)
答案 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