«Ошибка ключа» в случае замены словаря регулярных выражений без учета регистра - PullRequest
0 голосов
/ 07 марта 2019

Со ссылкой на обе эти ссылки:

Я пытаюсь использовать этот метод, чтобы иметь возможность заменить введенную пользователем строку, используя словарь, созданный из CSV, но с учетом регистра.

Решение заключается в следующем:

string=input("Please enter your string")
pattern = re.compile(r'(?<!\w)(' + '|'.join(re.escape(key) for key in sorted(dict.keys(),key=len, reverse=True)) + r')(?!\w)')
result = pattern.sub(lambda x: dict[x.group()], string)
print(result)

Теперь я попытался использовать метод RE.IGNORECASE в конце моей компиляции, а также использовать «Метод словаря без учета регистра», чтобы изменить мой первоначальный словарь, но независимо от того, какой метод я пытаюсь использовать, я получаю ту же ошибку всякий раз, когда ввод не точно соответствует ключевым словам "Key Error 'keyword' doesn't match".

1 Ответ

0 голосов
/ 08 марта 2019

Предположим, что в ваших словарных ключах есть только строчные или только прописные слова, вы можете сделать что-то вроде этого:

import re
dict = {'KEYWORD': "replacement_keyword", 'EXAMPLE': 'b', 'EXAMPLE2: 2': 'c'}
string=input("Please enter your string")
pattern = re.compile(r'(?<!\w)(' + '|'.join(re.escape(key) for key in sorted(dict.keys(), key=len, reverse=True)) + r')(?!\w)', re.IGNORECASE)
result = pattern.sub(lambda x: dict[str.upper(x.group())], string)
print(result)

Используя str.upper или str.ниже в случае, если ваши ключи строчные, вы соответствуете вашим ключам.

Выходные данные:

Please enter your string: Keyword KEYWORD keyWord
replacement_keyword replacement_keyword replacement_keyword

Надеюсь, это решит, чего вы хотите достичь, в противном случае, пожалуйста, предоставьтебольше контекста.

...