在Python中将单词与模式匹配

2024-09-27 21:32:09 发布

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

我试图解密一些文本,并想为此编写一个Python脚本。 文本的加密方式是每个字母都映射到字母表中的一个字母。我想试着把大单词和英语单词表匹配起来,因为我认为它们几乎没有什么可能性。在

我的问题是,如何检查一个单词是否匹配ABCB这样的模式。所以前三个字母不同,但最后一个字母和第四个字母一样。在这里是有可能的。我试过使用正则表达式,但我无法想出一个长度为n的单词的正则表达式。有人有什么建议吗?在

编辑:我被要求解释更多的模式。在上面的例子中,每个字母都映射到字母表中的一个字母。所以A映射到A字母,B映射到另一个字母,C映射到另一个字母,最后一个B映射到第一个B的同一个字母。所以这个模式告诉你哪些字母是相同的,哪些是不同的。上面的模式说明前三个字母不同(A、B和C不同),最后一个字母与第二个字母相同(因为它们都是B)WARE'是一个解决方案,因为a映射到w,B映射到e,C映射到r


Tags: 文本脚本编辑字母方式模式解决方案可能性
1条回答
网友
1楼 · 发布于 2024-09-27 21:32:09

下面是一些概念验证代码,用于将单词转换为您建议的格式的模式。(我写这篇文章时没有考虑效率,只有清晰)。在

import string

def word_to_pattern(word):
    # Stores actual-letter to pattern-placeholder mapping
    mapping = {}

    # ZYXW... so we cap pop letters starting with A from the end
    available_pattern_letters = list(string.ascii_uppercase)[::-1]

    pattern = []
    for letter in word.upper():
        if letter not in string.ascii_uppercase:
            # for punctuation etc
            pattern.append(letter)
            continue
        if letter not in mapping:
            # new letter we haven't seen yet in this word
            mapping[letter] = available_pattern_letters.pop()
        pattern.append(mapping[letter])
    return pattern.join("")

那么只需检查word_to_pattern(a) == word_to_pattern(b)。在

相关问题 更多 >

    热门问题