LINUX.ORG.RU

Не срабатывает re.sub

 


0

1

Имеется небольшой текстовый фрагмент, помещенный в переменную data:

divSchemes
{
default none;
div(tauMC) Gauss linear;
}

Нужно поменять четвертую строчку на div(tauMC) corrected;

Вот предполагаемый код, но замена не выполняется:

dtMC_reg = re.compile(r"div\(tauMC\)\s*\w*\s\w*(?=[;])")
dtMC_mas = dtMC_reg.findall(data)
dtMC_txt_add = «div(tauMC) corrected»
data = re.sub(dtMC_mas[0], dtMC_txt_add, data)

Вроде и скобки я экранирую: div\(tauMC\). Но не работает И ЗАМЕНА НЕ ВЫПОЛНЯЕТСЯ, а если нет скобок, то есть

divSchemes
{
default none;
divtauMC Gauss linear;
}

то работает. Уже устал искать ошибку, может в кодировке дело

Но ясно, что здесь все завязано со скобками: div(tauMC)

Ответ на: комментарий от true_admin

Используй тэг \[code\],

И ты прочитай то место, где написано, как вставить тег простым текстом без извращений. А то ТС теперь пытается написать \[code\], когда надо просто [code=python]тут идёт код[/code]

proud_anon ★★★★★ ()

Уже 7 исправлений, а я так и не понял в чем проблема.

Python 3.4.2 (v3.4.2:ab2c023a9432, Oct  6 2014, 22:15:05) [MSC v.1600 32 bit (In
tel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> re.sub('(div\(tauMC\))([^;]*)(;)', '\\1 corrcted\\3', 'div(tauMC) Gauss line
ar;')
'div(tauMC) corrcted;'
>>>

winlook38 ★★ ()

Ты какую-то дикую конструкцию сочинил. Ты сначала находишь нужные строки, потом производишь по ним замену, используя их как регулярные выражения. Таким образом, в строке data = re.sub(dtMC_mas[0], dtMC_txt_add, data) у тебя dtMC_mas[0] == "div(tauMC) Gauss linear;" — а тут скобки уже не экранированы.

У тебя два варианта:

  • Плохой: вместо data = re.sub(dtMC_mas[0], dtMC_txt_add, data) написать data = data.replace(dtMC_mas[0], dtMC_txt_add) или data = re.sub(re.escape(dtMC_mas[0]), dtMC_txt_add, data).
  • Нормальный: вместо всего этого сделать re.sub(r"div\(tauMC\)\s*\w*\s\w*(?=[;])", "div(tauMC) corrected", data)
proud_anon ★★★★★ ()
Последнее исправление: proud_anon (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.