2

我试图在我不知道任何字符是什么的情况下暴力破解密文,但我确实知道语言、每个单词的长度和所有字符的位置。

文本中的一个单词是“avarrm”,所以我希望我可以遍历一个单词字典并尝试仅匹配第一个位置的字符与第三个位置的字符相同的字符,并且第 4 位的字符与第 5 位的字符相同,其余字符不是这两个字符中的任何一个或彼此相同。

这听起来像是一个正则表达式的工作,但我完全不知道我将如何编写它。这是可行的,如果可行,怎么做?或者我应该忘记正则表达式并用一堆ifs来做吗?

4

2 回答 2

4

这可能是需要的:

^(.).\1(.)\2((?!(\1|\2)).)*$

(.).\1(.)\2匹配一个字符,后跟一个字符,后跟一个与第一个相同的字符,后跟两个相同的字符。

((?!(\1|\2)).)*匹配零个或多个既不是第一个字符也不是第四个字符的字符。

这是你的要求吗?

编辑

这将确保最后一部分不会有重复的字符:

^(.).\1(.)\2((?!(.).*\4)(?!(\1|\2)).)*$

要使第二个字符不重复,请使用:

^(.)((?!\1).)\1((?!(\1|\2)).)\3((?!(.).*\6)(?!(\1|\2|\3)).)*$
于 2013-03-26T12:16:15.533 回答
0

另一种方法可能是将字符串转换为数字序列:

str1 = 'avarrm'
str2 = 'lylbbn'

def num_sequence(str_arg):
    return [dict(zip(str_arg, range(len(str_arg))))[n] for n in str_arg]

print num_sequence(str1), num_sequence(str2)

这将输出

[0, 3, 2, 3, 5, 5] [0, 3, 2, 3, 5, 5]

由于列表相等,因此“lylbbn”是候选解决方案。

于 2013-03-26T13:30:59.670 回答