正则表达式查找两个字符串之间的共同字母

问题描述 投票:0回答:3

我在谷歌上搜索了几个小时并得到了部分解决方案。

我对 Groovy 和正则表达式都很陌生。多年来我偶尔使用正则表达式,但我对它还很不满意。

我有一个简单的游戏,可以检查你与隐藏单词有多少相同的字母。

为了简单起见,假设单词是“pan”,而用户输入“can”。

我希望正则表达式的结果给我“an”。

现在,我已经通过这样做(在 Groovy 中)部分实现了这一点:

// Where "guess" is the user's try and "word" is the word they need to guess.
def expr = "[$word]"
def result = guess.find(expr)

结果字符串仅包含第一个匹配的字母。有人有更优雅的解决方案吗? 预先感谢

regex groovy
3个回答
3
投票

我认为这不是正则表达式的用例。您必须注意一些事情,例如不要让用户自动猜测是否输入

.*
等。

在我看来,典型的收集工作更适合这项任务。一种解决方案是找到两个单词的交集,将它们视为字符集:

(word as Set).intersect(guess as Set).join()

或者过滤密词中出现的猜测字符:

guess.findAll { word.contains(it) }.unique().join()

1
投票

假设两个字符串是s1和s2 现在找到公共字符串:

commonString=s1.replaceAll("[^"+s2+"]","");

如果你的单词包含元字符那么 首先做:

Pattern.quote(s2);

然后

commonString=s1.replaceAll("[^"+s2+"]","");

0
投票

你可以尝试:

guess.findAll( /[$word]/ ).join()
© www.soinside.com 2019 - 2024. All rights reserved.