Замените не буквенно-цифровые символы, кроме некоторых исключений python

В Perl s/[^\w:]//g заменит все небуквенно-цифровые символы ЗА ИСКЛЮЧЕНИЕМ:

В python я использую re.sub(r'\W+', '',mystring), который удаляет все не буквенно-цифровые символы, кроме подчеркивания _. Есть ли способ поставить исключения, я не хочу заменять знаки, такие как = и .

Ранее я применял другой подход, т.е. заменял все нежелательные символы с помощью re.sub('[!@#\'\"$()]', '',mystring`) Однако я не могу предсказать, какие все символы могут появиться в mystring, поэтому я хочу удалить все ненужные символы. буквенно-цифровые символы, кроме нескольких.

Гугл не дал адекватного ответа. Ближайший поиск: regex python разделяет любые \W+ с некоторыми исключениями но мне и это не помогло.


person pythonRcpp    schedule 14.01.2015    source источник


Ответы (3)


Вы можете указать все, что вам не нужно удалять, в класе с отрицательным символом.

re.sub(r'[^\w'+removelist+']', '',mystring)

Тест

>>> import re
>>> removelist = "=."
>>> mystring = "asdf1234=.!@#$"
>>> re.sub(r'[^\w'+removelist+']', '',mystring)
'asdf1234=.'

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

Что означает отрицательный класс символов

Когда ^ перемещается в класс символов, он не действует как якорь, поскольку он отрицает класс символов.

То есть ^ внутри класса символов, например [^abc], сводит на нет значение класса символов.

Например, [abc] будет соответствовать a b или c, тогда как [^abc] не будет соответствовать a b или c. Что также может быть сформулировано как любое, кроме a b или c

person nu11p01n73R    schedule 14.01.2015
comment
спасибо @nu11p01n73R . Я не добавлял список удаления внутри, [] . Я дал что-то вроде '^w.=', что, конечно же, не работало. Не могли бы вы сказать значение r и ^, ^ обычно используется как начало с, но здесь, кажется, оно имеет другое значение. - person pythonRcpp; 14.01.2015
comment
@user1977867 user1977867 Да, когда ^ внутри класса символов говорит как [^abc], это сводит на нет значение класса символов. То есть [abc] будет соответствовать a b или c, тогда как [^abc] не будет соответствовать a b или c. Это что угодно, кроме a b или c - person nu11p01n73R; 14.01.2015
comment
Могу я спросить, почему вы называете список удаления списком удаления? Мне кажется, что это список символов, которые вы хотели бы сохранить. Я упоминаю об этом только потому, что это сбило меня с толку. - person ikku100; 31.03.2017
comment
@ikku100 О, я упомянул об этом в ответе Здесь переменная removelist — это строка, содержащая список всех символов, которые нужно исключить из удаления. - person nu11p01n73R; 01.04.2017

re.sub(r'[^a-zA-Z0-9=]', '',mystring)

Вы можете добавить все, что хотите, например _, что хотите сохранить.

person vks    schedule 14.01.2015

Я считаю, что подход, который вы описываете в perl, также может быть использован в python, например:

re.sub(r'[^\w=]', '',mystring)

удалит все, кроме словесных символов и =

person maillard    schedule 14.01.2015