Уведомления

Группа в Telegram: @pythonsu

#1 Июль 28, 2014 12:41:10

content
Зарегистрирован: 2014-07-26
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена строки в многострочном string

Поскажите кто-нибудь пожалуйста как заменить строку в многострочном стринге.

нужно заменить 4-y строку (начиная со слова LANEHEIGHT до слова ARM ), значение(цифры справа) LANEHEIGHT бывает разным.

import re

#_________STRING_______________

string = """<PANENV2
ACT 1
VIS 1 1 1
LANEHEIGHT 10 0
ARM 1
DEFSHAPE 0 -1 -1
PT 0 0 0
>
"""

#_____НОВАЯ-СТРОКА____________

newlh = "LANEHEIGHT 0 0"

#_____ЗАМЕНА-СТРОКИ___________

newstring = re.sub(re.compile('^LANEHEIGHT', re.MULTILINE), newlh , string)

Отредактировано content (Июль 28, 2014 13:01:55)

Офлайн

#2 Июль 28, 2014 12:57:52

content
Зарегистрирован: 2014-07-26
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена строки в многострочном string

у меня выдает такое

<PANENV2
ACT 1
VIS 1 1 1
LANEHEIGHT 0 0 10 0
ARM 1
DEFSHAPE 0 -1 -1
PT 0 0 0
>

в питоне как-то можно заменить всё начиная со слова1 заканчивая словом2?

Офлайн

#3 Июль 28, 2014 13:09:11

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Замена строки в многострочном string

content
Обратите внимание на строковые методы find, replace. Да и вообще можно проглядеть модуль string - от этого только польза будет.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Отредактировано JOHN_16 (Июль 28, 2014 13:10:36)

Офлайн

#4 Июль 28, 2014 13:45:55

content
Зарегистрирован: 2014-07-26
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена строки в многострочном string

Пробовал replace, непонятно как в find и replace задать диапазон от слова до слова или до конца строки(\n)
Несколько дней всего изучаю питон, киньте кусок кода пожалуста.

Отредактировано content (Июль 28, 2014 14:20:44)

Офлайн

#5 Июль 28, 2014 14:33:09

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

Замена строки в многострочном string

Вот пример как заменить все между двух слов с помощью regexp:

import re
a = """aaa
bbb
ccc
ddd
eee
"""
b = "Censored"
# re.DOTALL - для многострочной замены
repl = re.compile( r"bbb.*ddd", re.MULTILINE | re.DOTALL )
print repl.sub( b, a )



Офлайн

#6 Июль 28, 2014 14:47:22

Morven
От: Кемерово
Зарегистрирован: 2013-12-24
Сообщения: 154
Репутация: +  7  -
Профиль   Отправить e-mail  

Замена строки в многострочном string

#
s = """<PANENV2
ACT 1
VIS 1 1 1
LANEHEIGHT 10 0
ARM 1
DEFSHAPE 0 -1 -1
PT 0 0 0
>
"""
print(s)
#Заменяем
news=s.replace("LANEHEIGHT 10 0","LANEHEIGHT 0 0")
#_____НОВАЯ-СТРОКА____________
print(news)

Отредактировано Morven (Июль 28, 2014 14:47:40)

Офлайн

#7 Июль 28, 2014 16:04:09

content
Зарегистрирован: 2014-07-26
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена строки в многострочном string

спасибо, вот так получилось

newstring =  re.sub(re.compile('^LANEHEIGHT.*$', re.MULTILINE), envh , envstr)

Офлайн

#8 Июль 28, 2014 23:19:40

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

Замена строки в многострочном string

>>> import re
>>> 
>>> s = """<PANENV2
... ACT 1
... VIS 1 1 1
... LANEHEIGHT 10 0
... ARM 1
... DEFSHAPE 0 -1 -1
... PT 0 0 0
... >"""
>>> 
>>> r =  'LANEHEIGHT 0 0'
>>> 
>>> out = re.sub(r'^LANEHEIGHT.+$', r, s, flags=re.M)
>>> print(out)
<PANENV2
ACT 1
VIS 1 1 1
LANEHEIGHT 0 0
ARM 1
DEFSHAPE 0 -1 -1
PT 0 0 0
>
>>>



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version