Группирование шаблона поиска за кадром вместе с соответствующим шаблоном поиска регулярных выражений для замены в целом

Я должен искать и заменять шаблон следующим условием: если в строке обнаружена строка "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= определение? Если это так, я предлагаю вам изменить свой алгоритм, чтобы сделать именно это:

  1. Если искать y=2 верно, то
  2. Если искать x=[0-9] верно, заменить на x=1;
  3. Остальное замени y=2 с x=1 y=2 (Для оптимизации вы можете сохранить и использовать начальный результат поиска для y=2.)
Другие вопросы по тегам