2010-12-26 12 views
1

私は単語辞書を持っていますが、私は正規表現を探しています。たとえば、単語BIGの場合は、BIT、BUGなどとすることができます。単語の長さは同じでなければなりません。正規表現を1文字の差分で見つけるには

ありがとうございました!

+0

私は1つの正規表現は答えではないと思います。あなたはおそらく正規表現を使用したいと思うでしょうが、あなたが適用する必要があるいくつかのロジックがあります。 – ajwood

+0

は 'dig'または' pig'をカウントしますか? – ajreal

+0

@ajrealはい、そうです – vkolodrevskiy

答えて

2
/\b([a-z]ig|b[a-z]g|bi[a-z])\b/i 

これはすべての単語で行う必要があります。正規表現だけでは、おそらくこの仕事のための最良のツールではありません。

1

おそらくこのようなものを使用しますか?

>>> def word_difference(word1, word2): 
...  c1, c2 = list(word1), list(word2) 
...  return [(i, c1[i], c2[i]) for i in in range(len(c1)) if c1[i] != c2[i]] 
>>> word_difference("foo", "bar") 
[(0, 'f', 'b'), (1, 'o', 'a'), (2, 'o', 'r')] 
>>> word_difference("big", "bug") 
[(1, 'i', 'u')] 

明らかに、返されるリストの長さは、異なる文字数です。キャラクターが異なるポジションにあるかどうかを述べなかったので、これがあなたの望むものだと思いますが、それは簡単です。セットを使用することもできます。

0

最終的に私は正規表現とアイデアを使用していなかった、私の解決策は、次のようになります。

public boolean diffOneChar(String word1, String word2) { 
    int diff=0; 
    if(word1 == null || word2 == null) return false; 
    if(word1.length() == 0 || word2.length() == 0) return false; 
    if(word1.length() != word2.length()) return false; 

    for(int i=0; i<word1.length(); i++) { 
     if(word1.charAt(i)!=word2.charAt(i)) 
      diff++; 
    } 

    return diff == 1; 
} 
1

私はideoneを使用して1よりもほぼ同じ解決策を見つけました。 しかし、vkolodrevskiyが「1文字のみの単語を取得するように」diff "と書いているので、 私はそれを尊重しました。

私のコードはPythonで書かれています。この質問では、正確な言葉はありません。

import re 

word = 'main' 

RE = '|'.join(word[0:i]+'(?!'+char+')[a-z]'+word[i+1:] for i,char in enumerate(word)) 
RE = '('+RE+')' 
print RE 

ch = 'the main reason is pain due to rain. hello muin, where is maih ?' 

print re.findall(RE,ch) 
0

さて、あなたは、複雑な正規表現、またはingeniusものの束を行うことができますが、私はそれが非常に簡単かもしれについてあなたに伝えたかった何かを発見しました。

Levenshteinモジュールをチェックして、2つのストリング間のハミング距離を取得します。それから、距離が1のものを手に入れてください。

pip install python-levenshteinをインストールするには、 Ubuntuなどを使用している場合は、sudo apt-get install python-levenshteinを使用できます。 Windowsの場合、ピップを完全に活用するには、C++コンパイラ(Python 3を使用している場合はVisual C++ 2010 Express、Python 2.xを使用している場合はVisual C++ 2008)が必要です。マイクロソフトから無料で入手できます)、必要に応じてウェブ検索を行います。

import Levenshtein #Note the capital L 
help(Levenshtein) #See the documentation 
Levenshtein.hamming("cat", "sat") #Returns 1; they must be the same length, as you specified 

ハミング以外にもたくさんの機能があります。ヘルプを読んでください(上のコードのヘルプ関数を介して)。ヘルプ機能を使用すると、関数は実際には驚くほどよく文書化されています。 qを押してヘルプを終了します。

関連する問題