正则表达式找到一个字符差异的单词

时间:2010-12-26 19:24:30

标签: regex

我有一个单词字典,我正在寻找可以帮助我获得只有一个字符差异的单词的正则表达式。例如,对于单词 BIG ,可以是单词 BIT BUG 等。单词的长度应该相等。

谢谢!

5 个答案:

答案 0 :(得分:2)

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

你必须用每一个字来做这件事。单凭正则表达式可能不是这项工作的最佳工具。

答案 1 :(得分: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')]

显然,返回列表的长度是不同的字符数。我认为这是你想要的,因为你没有说明角色是否可能处于不同的位置 - 但这也很简单,你可以使用套装。

答案 2 :(得分:1)

我找到了与使用ideone的解决方案几乎相同的解决方案。 但是,正如vkolodrevskiy写的“只能获得一个字符 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)

答案 3 :(得分: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;
}

答案 4 :(得分:0)

好吧,你可以做一堆复杂的正则表达式,或者是一些复杂的正则表达式,但是我发现了一些我想告诉你的东西可能要容易得多。

查看Levenshtein模块以获得两个弦之间的汉明距离。然后得到距离为1的那些。

要安装,您可以使用pip install python-levenshtein。如果您使用Ubuntu等,则可以使用sudo apt-get install python-levenshtein。如果你在Windows上,为了充分利用pip,你需要一个C ++编译器(如Visual C ++ 2010 express,如果你使用Python 3,或者Visual C ++ 2008 express for Python 2.x;你可以下载那些从Microsoft免费获得;如果需要,可以进行网络搜索。)

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退出帮助。