可能性の重複:私は、文字列と文字列
s
t
を与えられています
Search for string allowing for one mismatch in any location of the string1-不一致正規表現
。 t
がすべてs
の中にあり、が1つの不一致文字にある正規表現がありますか? (t
の文字数は、最大で1文字です。)
可能性の重複:私は、文字列と文字列
s
t
を与えられています
Search for string allowing for one mismatch in any location of the string1-不一致正規表現
。 t
がすべてs
の中にあり、が1つの不一致文字にある正規表現がありますか? (t
の文字数は、最大で1文字です。)
私は「wouldn必然的にこれは正規表現で行います。あなたは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
は最適ではありません。 Levenshteinは1つのエラーがあっても数え続けます – mpen
そうですが、Levenshteinの距離はかなり速く、とにかくパフォーマンスに重要なコードではないかもしれません。早すぎる最適化とそのすべて。 – wim
彼のコメントでは、彼は彼がこれをやろうとしていたことを除いて:http://stackoverflow.com/questions/2420412/search-for-string-allowing-for-one-mismatch-in-any-location-of-the -stringはかなり大きなデータセットです。私はこれが時期尚早だとは思わない。 – mpen
はい、絶対に。例えば、t
ならば、そのような正規表現は言っ
.bcde|a.cde|ab.de|abc.e|abcd.
が、これはt
は全く大きい場合は特に、ほぼ確実ないこれを行うための最善のか、最も効率的な方法である、"abcde"
です。 (それが大きい場合は、あなたが
a(?:b(?:c(?:d.|.e)|.de)|.cde)|.bcde
として
.bcde|a(?:.cde|b(?:.de|c(?:.e|d.)))
または多分としてそれを再定式化することにより、多少その性能を向上させることができますが、それはまだ最善のアプローチではありません。)
それは@Robjong – Robjong
物事が容易になり、データはと遊ぶためにいくつかの例を追加してください:[この](http://stackoverflow.com/questions/2420412/search-for-string-allowing-for-one - mismatch-in-any-string-of-the-string)は、私がやろうとしていることです。 – Randomblue
私はこの問題について専門家はいませんが、最大で1つの不一致を許す変形例を使用することができます:http://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm – mpen