Группирование шаблона поиска за кадром вместе с соответствующим шаблоном поиска регулярных выражений для замены в целом
Я должен искать и заменять шаблон следующим условием: если в строке обнаружена строка "y=2" и если ей предшествует или не предшествует "x =", то подставьте соответствующую строку "y=2". "с" x=1 y=2 ". Я пытаюсь со следующим
line="hello x=7 y=2"
m = re.search(r"((?<=x=\d\s)|(?<!x=\d\s))y=2", line)
if m:
s = "x=1 " + m.group(0)
line = re.sub(m.group(0), s, line)
print line
Я получаю вывод как привет x = 7 x=1 y=2, который отличается от моего ожидаемого вывода: привет x=1 y=2
Как получить весь шаблон, включая выражение lookbehind, в виде совпадающей строки? Это решит мою проблему.
m.group(0) always print y=1, and m.group(1) prints nothing
Я хочу, чтобы это было целой строкой "x=7 y=1", чтобы замена работала правильно
2 ответа
Я не думаю, что вам нужно смотреть за образец, чтобы сделать это. Вся работа по замене y=2
или же x=\d y=2
в x=1 y=2
, право?
line="hello x=7 y=2"
re.sub(r'(x=\d\s)?y=2', 'x=1 y=2', line)
Так что, в принципе, если строка имеет y=2
заменить или добавить предыдущее x=
определение? Если это так, я предлагаю вам изменить свой алгоритм, чтобы сделать именно это:
- Если искать
y=2
верно, то - Если искать
x=[0-9]
верно, заменить наx=1
; - Остальное замени
y=2
сx=1 y=2
(Для оптимизации вы можете сохранить и использовать начальный результат поиска дляy=2
.)