Найти - Пользователи
Полная версия: Замена строки в многострочном string
Начало » Python для новичков » Замена строки в многострочном string
1
content
Поскажите кто-нибудь пожалуйста как заменить строку в многострочном стринге.

нужно заменить 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
у меня выдает такое

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

в питоне как-то можно заменить всё начиная со слова1 заканчивая словом2?
JOHN_16
content
Обратите внимание на строковые методы find, replace. Да и вообще можно проглядеть модуль string - от этого только польза будет.
content
Пробовал replace, непонятно как в find и replace задать диапазон от слова до слова или до конца строки(\n)
Несколько дней всего изучаю питон, киньте кусок кода пожалуста.
agalen
Вот пример как заменить все между двух слов с помощью 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 )
Morven
#
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)
content
спасибо, вот так получилось
newstring =  re.sub(re.compile('^LANEHEIGHT.*$', re.MULTILINE), envh , envstr)
py.user.next
>>> 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
>
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB