Регулярное выражение для удаления пробелов

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

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

Спасибо

  • 2
    это становится все более и более нелепым. ты вообще понимаешь, что делает этот код?
  • 0
    Да, кроме части регулярных выражений.
Показать ещё 9 комментариев
Теги:
function

6 ответов

6
Лучший ответ

Самый быстрый общий подход избегает REs в пользу строкового быстрого, мощного метода .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. *, т.е. bytestrings - метод Unicode string .translate несколько отличается - он принимает один аргумент, который должен быть отображением значений ord для Unicode символы в строки Unicode, или None для удаления. I.e., используя dict удобный .fromkeys classmethod:

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

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

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

3
p.sub(' ', value)

должен быть

p.sub('', value)

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

1

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

1

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

  • 0
    Я думаю, что вы имеете в виду ''.join(value.split())
  • 0
    Да, спасибо, читаю слишком быстро
0

@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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню