Регулярное выражение для удаления пробелов - PullRequest
1 голос
/ 17 января 2010
def remove_whitespaces(value):
    "Remove all whitespaces"
    p = re.compile(r'\s+')
    return p.sub(' ', value)

Приведенный выше код удаляет теги, но не удаляет «все» пробелы из значения.

Спасибо

Ответы [ 6 ]

6 голосов
/ 17 января 2010

Самый быстрый общий подход избегает RE в пользу быстрого, мощного .translate метода:

import string
identity = string.maketrans('', '')

def remove_whitespace(value):
  return value.translate(identity, string.whitespace)

В 2.6 это даже проще, просто

  return value.translate(None, string.whitespace)

Обратите внимание, что это применимо к "простым" строкам Python 2. *, т. Е. Байтовым строкам - метод Unicode 'strings' .translate несколько отличается - он принимает один аргумент, который должен быть отображением значений ord для Символы Юникода в строки Юникода или None для удаления. То есть, используя удобный метод dict .fromkeys:

nospace = dict.fromkeys(ord(c) for c in string.whitespace)

def unicode_remove_whitespace(value):
  return value.translate(nospace)

чтобы удалить точно такой же набор символов. Конечно, в Юникоде также есть больше символов, которые вы можете рассматривать как пробел и которые хотите удалить - поэтому вы, вероятно, захотите построить отображение unicode_nospace на основе информации из модуля unicodedata , а не использовать этот более простой подход на основе модуля строка .

3 голосов
/ 17 января 2010
p.sub(' ', value)

должно быть

p.sub('', value)

Первый заменяет все пробелы одним пробелом, второй заменяет ничто.

1 голос
/ 18 января 2010

re.sub('\s*', '', value) также должно работать!

1 голос
/ 17 января 2010

Может быть value.join (p.split ()) '' .join (value.split ()) может работать для вас?

0 голосов
/ 18 января 2010

@ OP, скомпилируйте ваш шаблон регулярных выражений снаружи, чтобы вам не приходилось вызывать re.compile каждый раз, когда вы используете процедуру. Также вы заменяете обратно на один пробел, который не удаляет пробелы, не так ли?

p = re.compile(r'\s+')
def remove_whitespaces(p,value):
    "Remove all whitespaces"    
    return p.sub('', value)

наконец, еще один метод, не использующий регулярные выражения, - это просто разделить пробелы и соединить их снова

def remove_whitespaces(value):
    "Remove all whitespaces"    
    return ''.join(value.split())
0 голосов
/ 17 января 2010

re.sub(r'\s', '', value) функция хорошо работает для меня, в этом случае.

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