Я не могу понять поведение re.sub pythons. Я хочу заменить целую многострочную строку ничем. Я хочу, чтобы пустая строка обратно:Почему re.sub не заменяет строку пустой строкой
#!/usr/bin/python
import re
if __name__ == "__main__":
data = """hello
world
good
day
"""
textarea = re.sub('.*', '', data)
print "processed '%s'" % textarea
textarea = re.sub('.*', '', data, flags=re.MULTILINE)
print "processed '%s'" % textarea
Приведенный выше код, по крайней мере, на моей машине не выводит следующее:
processed ''
Это для обоих случаях, многострочный/не многострочный. Вместо этого одиночные кавычки распространяются по нескольким строкам. Почему это так?
Что я действительно хочу сделать, это удалить пустые строки (строки, содержащие только ноль или больше пробелов) из многострочной строки, и я считаю, что приведенный выше пример является проблемой.
Спасибо.
ОТВЕТ:
Как другие отметили. MULTILINE меня сбила с толку. Чтобы ответить на исходный вопрос, вместо моего желания точка не соответствовала новой строке, поэтому все заменялось пустой строкой, за исключением того, что строки новой строки в исходной строке были оставлены в покое.
Добавив флаг re.DOTALL в приведенный выше пример, вы получили ожидаемое поведение пустой строки.
Это работает для меня. Для соответствия строкам, содержащим только ноль или более пробелов: '^ * $ \ n' – dsh
Извините, ребята, я не понимал, что мой разрез и вставка удалили перерывы из назначения данных. Я снова редактирую сообщение, чтобы вернуть их обратно. – Bitdiot
@Bitdiot, каков ваш ожидаемый результат? –