我有一个单词字典,我正在寻找可以帮助我获得只有一个字符差异的单词的正则表达式。例如,对于单词 BIG ,可以是单词 BIT , BUG 等。单词的长度应该相等。
谢谢!
答案 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退出帮助。