Python: лишить все, кроме пробелов и буквенно-цифровых - PullRequest
29 голосов
/ 06 мая 2010

У меня есть большая строка с скобками и запятыми и тому подобное. Я хочу раздеть всех этих персонажей, но оставить интервал. Как я могу это сделать. На данный момент я использую

strippedList = re.sub(r'\W+', '', origList)

Ответы [ 4 ]

37 голосов
/ 06 мая 2010
re.sub(r'([^\s\w]|_)+', '', origList)
8 голосов
/ 23 сентября 2012

Немного более быстрая реализация:

import re

pattern = re.compile('([^\s\w]|_)+')
strippedList = pattern.sub('', value)
7 голосов
/ 06 мая 2010

Версии на основе регулярных выражений могут быть быстрее (особенно если вы переключаетесь на использование скомпилированного выражения), но для ясности мне это нравится:

"".join([c for c in origList if c in string.letters or c in string.whitespace])

Это немного странно с вызовом join(), но я думаю, что это довольно идиоматичный Python для преобразования списка символов в строку.

1 голос
/ 06 мая 2010

Демонстрация того, какие символы вы получите в результате:

>>> s = ''.join(chr(i) for i in range(256)) # all possible bytes
>>> re.sub(r'[^\s\w_]+','',s) # What will remain
'\t\n\x0b\x0c\r 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz'

Документы: re.sub , Regex HOWTO: соответствующие символы , Regex HOWTO: повторение вещей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...