Форум сайта python.su
0
Поскажите кто-нибудь пожалуйста как заменить строку в многострочном стринге.
нужно заменить 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)
Офлайн
0
у меня выдает такое
<PANENV2
ACT 1
VIS 1 1 1
LANEHEIGHT 0 0 10 0
ARM 1
DEFSHAPE 0 -1 -1
PT 0 0 0
>
Офлайн
221
content
Обратите внимание на строковые методы find, replace. Да и вообще можно проглядеть модуль string - от этого только польза будет.
Отредактировано JOHN_16 (Июль 28, 2014 13:10:36)
Офлайн
0
Пробовал replace, непонятно как в find и replace задать диапазон от слова до слова или до конца строки(\n)
Несколько дней всего изучаю питон, киньте кусок кода пожалуста.
Отредактировано content (Июль 28, 2014 14:20:44)
Офлайн
17
Вот пример как заменить все между двух слов с помощью 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 )
Офлайн
7
# 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)
Офлайн
0
спасибо, вот так получилось
newstring = re.sub(re.compile('^LANEHEIGHT.*$', re.MULTILINE), envh , envstr)Офлайн
857
>>> 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 > >>>
Офлайн