我正在尝试使用密文,我不知道这些字符是什么,但我确实知道语言,每个单词的长度以及所有字符的位置。
文中的一个词是“avarrm”,所以我希望我可以遍历单词词典,并尝试仅匹配第一个位置的字符与第三个字符中的字符相同的字词。位置,第4位的字符与第5位的字符相同,其余字符不是这两个字符中的任何一个或相同。
这听起来像是一个正则表达式的工作,但我完全不知道如何写它。这是可行的,如果是的话,怎么样?或者我应该忘记正则表达式并使用一堆ifs来做它?
答案 0 :(得分:4)
这可能是必需的:
^(.).\1(.)\2((?!(\1|\2)).)*$
(.).\1(.)\2
匹配一个字符,后跟一个字符后跟一个字符,后跟两个相同的字符。
((?!(\1|\2)).)*
匹配零个或多个字符,既不是第一个字符也不是第四个字符。
这是你的要求吗?
修改强>
这个将确保最后一部分不会有重复的字符:
^(.).\1(.)\2((?!(.).*\4)(?!(\1|\2)).)*$
对于第二个不重复的角色,请使用:
^(.)((?!\1).)\1((?!(\1|\2)).)\3((?!(.).*\6)(?!(\1|\2|\3)).)*$
答案 1 :(得分: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'是候选解决方案。