Как заменить несколько значений в шаблоне сопоставления из строки - PullRequest
1 голос
/ 20 апреля 2019

Я хочу найти шаблон в строке, а затем снова найти недопустимый символ в соответствующем шаблоне, а затем удалить их или заменить некоторыми допустимыми символами.

У меня есть несколько типовых словарей, например. sample_dict = {"randomId":"123y" uhnb\n g", "desc": ["sample description"]}

В этом случае я хочу найти значение словаря, скажем "123y" uhnb \ n g ", а затем удалить в нем недопустимые символы, такие как (", \ t, \ n) и т. Д. я попытался сохранить все словари в файле, затем прочитать файл и соответствующий шаблон для значения словаря, но это дает мне список соответствующего шаблона, я также могу скомпилировать эти соответствия, но я не уверен, как выполнить замену в исходном словаре значение, поэтому мой окончательный вывод будет: {"randomId":"123y uhnb g", "desc": ["sample description"]}

pattern = re.findall("\":\"(.+?)\"", sample_dict)

ожидаемый результат:

{"randomId":"123y uhnb g", "desc": ["sample description"]}

фактический результат:

['123y" uhnb\n g']

1 Ответ

1 голос
/ 20 апреля 2019

Вы можете просто заменить не буквенно-цифровые символы в своем значении, используя re.sub , как показано ниже

dct = {"randomId":"123y uhnb\n g", "desc": ["sample description"]}
import re

for key, value in dct.items():
    val = None
    #If the value is a string, directly substitute
    if isinstance(value, str):
       val = re.sub(r"[^a-zA-Z0-9 ]", '', str(value))
    #If value is a list, substitute for all string in the list
    elif isinstance(value, list):
       val = []
       for item in value:
           val.append(re.sub(r"[^a-zA-Z0-9]", ' ', str(item)))
    dct[key] = val

print(dct)
#{'randomId': '123y uhnb g', 'desc': ['sample description']}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...