Regex до символа, но если не предшествует другой символ - PullRequest
0 голосов
/ 21 января 2019

Я хотел создать регулярное выражение для соответствия строке, которая отображается с Localize(" и должна заканчиваться, когда всплывает ", но не когда экранируется " (предшествует \).

Мое текущее регулярное выражение, которое не учитывает, что «если не предшествует» выглядит следующим образом:

\bLocalize\(\"(.+?)(?=\")

Любые идеи?

РЕДАКТИРОВАТЬ

Со следующей строкой:

Localize("/Windows/Actions/DeleteActionWarning=The action you are trying to \"delete\" is referenced in this document.") + " Want to Proceed ?";

Я хочу, чтобы он прекратился после того, как наступит document., потому что это первый ", который появляется без завершающего \ (который появляется около delete)

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Вы можете использовать

\bLocalize\("([^"\\]*(?:\\.[^"\\]*)*)

См. это демонстрационное регулярное выражение .

Подробнее :

  • \bLocalize - целое слово Localize
  • \(" - подстрока ("
  • ([^"\\]*(?:\\.[^"\\]*)*) - Группа захвата 1:
    • [^"\\]* - 0 или более символов, отличных от " и \
    • (?:\\.[^"\\]*)* - 0 или более повторений сбежавшего символа с последующим 0 или более символами, отличными от " и \

В Python объявите шаблон с

reg = r'\bLocalize\("([^"\\]*(?:\\.[^"\\]*)*)'

Демо

import re
reg = r'\bLocalize\("([^"\\]*(?:\\.[^"\\]*)*)'
s = "Localize(\"/Windows/Actions/DeleteActionWarning=The action you are trying to \\\"delete\\\" is referenced in this document.\") + \" Want to Proceed ?\";"
m = re.search(reg, s)
if m:
    print(m.group(1))
# => /Windows/Actions/DeleteActionWarning=The action you are trying to \"delete\" is referenced in this document.
0 голосов
/ 21 января 2019

Вы можете использовать не регулярное выражение ^

\ bLocalize (\ "*? [^ \] \"

...