2013-06-27 3 views
2

У меня есть скрипт, который перебирает несколько поиска/замены регулярных выражений в Python, один из этих операций удалить конечные пробелы Я пробовал:Удаление Продольный Пробелы с питоном

re.sub(r"""\s+$""", '', str) 

re.sub(r""" +$""", r"""""", str) 

и

re.sub(r""" +$""", r"""""", str, re.M) 

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

+3

Почему все тройные кавычки? 'r" \ s + $ "' будет работать нормально. – rmunn

+3

Почему вы хотите интегрировать это в механизм замены регулярных выражений? Для этого нет очевидных оснований. –

+0

@rmunn это просто для обеспечения того, что нормальное выражение не работает, ваш включен, SlaterTyranus, потому что у меня его уже нет, и я не хочу двигаться по строкам в отдельном цикле только для этого, и –

ответ

5

Функция sub и принимает целевую строку в качестве аргумента (и возвращает модифицированную копию):

str = re.sub(r'\s+$', '', str) 

или если вы хотите, чтобы удалить конечные пробелы из нескольких строк в одной строке, используйте один из эти:

str = re.sub(r'\s+$', '', str, 0, re.M) 
str = re.sub(r'\s+$', '', str, flags=re.M) 

0 является count параметр (где 0 означает отсутствие предела), а затем re.M делает $ матч на линии окончаний. Если вы не укажете flags явно, вам нужен этот дополнительный параметр, потому что flags на самом деле пятый.

Обратите внимание, что вам нужны только тройные кавычки для многострочных строк. Важно то, что у модели r.

В качестве альтернативы rstrip используется для удаления завершающие пробельные:

str = str.rstrip() 
+0

да редактирование ошибки я фактически использовал 'sub' –

+0

+1 для rstrip, определенно правильный выбор здесь , Любая идея о том, как производительность этих двух тарифов? –

+0

@MysticOdin все же вам нужно указать входную строку. в противном случае, как 're' собираешься узнать, какая строка для замены? –

1

Это удаляет трейлинг пространство, используя регулярное выражение:

import os 
import re 
PATH = '/path/to/source' 

re_strip = re.compile(r'[ \t]+(\n|\Z)') 

for path, dirs, files in os.walk(PATH): 
    for f in files: 
     file_name, file_extension = os.path.splitext(f) 
     if file_extension == '.py': 
      path_name = os.path.join(path, f) 
      with open(path_name, 'r') as fh: 
       data = fh.read() 

      data = re_strip.sub(r'\1', data) 

      with open(path_name, 'w') as fh: 
       fh.write(data)