python - 将单词与 Python 中的模式匹配

标签 python regex design-patterns

<分区>

我正在尝试解密一些文本,并想为此编写一个 Python 脚本。 文本加密的方式是每个字母映射到字母表中的一个字母。我想尝试将大单词匹配到英文单词列表,因为我认为它们的可能性很小。

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

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

最佳答案

这里有一些概念验证代码,用于将单词转换为您建议的格式中的模式。 (我没有考虑效率,只考虑清晰度)。

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) 即可。

关于python - 将单词与 Python 中的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42125644/

相关文章:

python:替换字符串中的特殊字符

PHP preg_match 部分 url

python - 查找所有不在正则表达式模式中的字符

python - 使用 mysql 常量的 sqlalchemy 语法

python - Keras 使用 tf.data.Dataset 预测循环内存泄漏,但不使用 numpy 数组

python - Pandas - 仅透视选择行

r - stringr::str_replace_all 的基本 R 替代方案,带有 c(pattern1 = replacement1) 选项

language-agnostic - 游戏对象库的代码与配置

java - 将对象从一种格式转换为另一种 Java(设计模式)

design-patterns - 单例模式和工厂模式的区别