Удалите все специальные символы, знаки препинания и пробелы из строки

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

10 Solutions collect form web for “Удалите все специальные символы, знаки препинания и пробелы из строки”

Это можно сделать без regex :

 >>> string = "Special $#! characters spaces 888323" >>> ''.join(e for e in string if e.isalnum()) 'Specialcharactersspaces888323' 

Вы можете использовать str.isalnum :

 S.isalnum() -> bool Return True if all characters in S are alphanumeric and there is at least one character in S, False otherwise. 

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

Вот регулярное выражение, которое соответствует строке символов, которые не являются буквами или цифрами:

 [^A-Za-z0-9]+ 

Вот команда Python для подстановки регулярных выражений:

 re.sub('[^A-Za-z0-9]+', '', mystring) 

Более короткий путь:

 import re cleanString = re.sub('\W+','', string ) 

Если вы хотите, чтобы пробелы между словами и цифрами заменяли '' на ''

 #!/usr/bin/python import re strs = "how much for the maple syrup? $20.99? That's ricidulous!!!" print strs nstr = re.sub(r'[?|$|.|!]',r'',strs) print nstr nestr = re.sub(r'[^a-zA-Z0-9 ]',r'',nstr) print nestr 

вы можете добавить более специальный символ и который будет заменен на «нет», т.е. они будут удалены.

Я думаю, что просто filter(str.isalnum, string) работает

 In [20]: filter(str.isalnum, 'string with special chars like !,#$% etcs.') Out[20]: 'stringwithspecialcharslikeetcs' 

Наиболее общий подход заключается в использовании «категорий» таблицы unicodedata, которая классифицирует каждый отдельный символ. Например, следующий код фильтрует только печатные символы в зависимости от их категории:

 import unicodedata # strip of crap characters (based on the Unicode database # categorization: # http://www.sql-und-xml.de/unicode-database/#kategorien PRINTABLE = set(('Lu', 'Ll', 'Nd', 'Zs')) def filter_non_printable(s): result = [] ws_last = False for c in s: c = unicodedata.category(c) in PRINTABLE and c or u'#' result.append(c) return u''.join(result).replace(u'#', u' ') 

Посмотрите на указанный URL выше для всех связанных категорий. Вы также можете, конечно, фильтровать по пунктуационным категориям.

Увидев это, я был заинтересован в расширении предоставляемых ответов, выяснив, что выполняется за меньшее количество времени, поэтому я прошел и проверил некоторые из предложенных ответов с помощью timeit против двух строк примера:

  • string1 = 'Special $#! characters spaces 888323'
  • string2 = 'how much for the maple syrup? $20.99? That s ricidulous!!!'

Пример 1

'.join(e for e in string if e.isalnum())

  • string1 – Результат: 10.7061979771
  • string2 – Результат: 7.78372597694

Пример 2.

import re re.sub('[^A-Za-z0-9]+', '', string)

  • string1 – Результат: 7.10785102844
  • string2 – Результат: 4.12814903259

Пример 3.

import re re.sub('\W+','', string)

  • string1 – Результат: 3.11899876595
  • string2 – Результат: 2.78014397621

Вышеуказанные результаты являются результатом наименьшего результата возврата из среднего значения: repeat(3, 2000000)

Пример 3 может быть в 3 раза быстрее, чем в примере 1 .

Предполагая, что вы хотите использовать регулярное выражение и хотите / нуждаетесь в коде Unicode-cognizant 2.x, который готов к 2to3:

 >>> import re >>> rx = re.compile(u'[\W_]+', re.UNICODE) >>> data = u''.join(unichr(i) for i in range(256)) >>> rx.sub(u'', data) u'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\xaa\xb2 [snip] \xfe\xff' >>> 

Использовать перевод:

 import string def clean(instr): return instr.translate(None, string.punctuation + ' ') 

Предостережение: работает только с строками ascii.

 import re abc = "askhnl#$%askdjalsdk" ddd = abc.replace("#$%","") print (ddd) 

и вы увидите свой результат как

«askhnlaskdjalsdk

  • Присвоить строки идентификаторам в Python
  • Как загрузить массив ячеек строк в файлах Matlab mat в список Python или кортеж, используя Scipy.io.loadmat
  • Новый для Python, заменяющий символы в строке
  • Как преобразовать список значений ascii в строку в python?
  • нахождение анаграмм строки в python
  • Любой лучший способ сделать a = b + a?
  • Python: Получить общие символы из строк
  • среднее количество символов на слово в списке
  • Python - лучший язык программирования в мире.