用未知字符的已知顺序匹配固定长度单词

2024-09-26 22:11:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用一种暴力的方式来破解一个密码,我不知道其中的任何一个字符是什么,但我知道语言,每个单词的长度和所有字符的位置。在

课文中有一个词是“avarrm”,所以我希望我能在字典里循环,只匹配第一个位置的字符与第三个位置的字符相同,第四个位置的字符与第五个位置的字符相同,剩下的字符不是这两个字符中的任何一个或彼此不相同。在

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


Tags: 语言密码if字典方式字符单词regex
2条回答

这可能是必需的:

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

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

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

这是你的要求吗?在

编辑

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

^{pr2}$

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

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

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

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]

由于列表是相等的,“lylbn”是一个解决方案候选。在

相关问题 更多 >

    热门问题