Как исключить символ из группы регулярных выражений?
Я хочу удалить все не-буквенно-цифровые символы. ИСКЛЮЧИТЕ дефис из строки (python).
Как изменить это регулярное выражение в соответствии с любым не-буквенно-цифровым char, кроме дефиса?
re.compile('[\W_]')
Спасибо.
Ответ 1
Вместо этого вы можете использовать отрицательный класс символов:
re.compile(r"[^a-zA-Z0-9-]")
Это будет соответствовать всем, что не соответствует буквенно-цифровым диапазонам или дефису. Он также соответствует подчеркиванию в соответствии с вашим текущим регулярным выражением.
>>> r = re.compile(r"[^a-zA-Z0-9-]")
>>> s = "some#%te_xt&with--##%--5 hy-phens *#"
>>> r.sub("",s)
'sometextwith----5hy-phens'
Обратите внимание, что это также заменяет пробелы (что, безусловно, может быть тем, что вы хотите).
Изменить: SilentGhost предположил, что, возможно, для процессора будет более выгодно обрабатывать квантификатор, и в этом случае вы можете просто использовать:
re.compile(r"[^a-zA-Z0-9-]+")
+ будет просто приводить к тому, что все последовательности последовательно совпадающих символов будут совпадать (и будут заменены) одновременно.
Ответ 2
\w соответствует буквенно-цифровым символам, добавляет в дефис, затем отменяет весь набор: r"[^\w-]"