Я пытаюсь использовать понимание списка, чтобы удалить некоторые символы из списка строк. Следовательно, я использую регулярное выражение для их удаления, но вывод регулярного выражения может быть пустым. Можно ли как-нибудь удалить эти выходные данные, не добавляя лишний l oop в массив или не запуская регулярное выражение?
Допустим, у меня есть следующий массив:
>>> example
["a ", " ", "", "a. &//*-_", " n", " b ", "*"]
Вывод, который я хочу получить:
>>> func(example)
'a#a &//_#n#b'
В настоящее время у меня есть эта функция, которая возвращает что-то близкое, что я могу обработать снова, чтобы получить желаемый результат, но я хотел знать, есть ли какое-либо решение без выполнения второго прохода .
def func(example):
pattern = "[^\w\s\&\/]"
return "#".join(re.sub(pattern, "", unidecode(tag).lower().strip()) for tag in example)
>>> func(example)
'a###a &//_#n#b#'
Одна возможность, о которой я подумал, заключается в следующем, но мне было интересно, если это снова вычисляет всю обработку строки:
def func2(example):
pattern = "[^\w\s\&\/]" # The pattern here is not particularly important, I just want to remove some weird characters and keep a couple
return "#".join(re.sub(pattern, "", unidecode(tag).lower().strip()) for tag in example if re.sub(pattern, "", unidecode(tag).lower().strip()))
>>> func2(example)
'a#a &//_#n#b'