Как я могу сопоставить r '\ a' в Python с использованием утверждения lookbehind?
На самом деле, мне нужно, чтобы соответствовать строки C++ как "a \" b"
иКак использовать '' в правильном выражении утверждения python (? <= \) для соответствия строкам с цитированием C++
"str begin \
end"
Я пробовал:
>>> res = re.compile('(?<=\)a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/re.py", line 190, in compile
return _compile(pattern, flags)
File "/usr/lib/python2.7/re.py", line 244, in _compile
raise error, v # invalid expression
>>> res = re.compile('(?<=\\)a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/re.py", line 190, in compile
return _compile(pattern, flags)
File "/usr/lib/python2.7/re.py", line 244, in _compile
raise error, v # invalid expression
sre_constants.error: unbalanced parenthesis
>>> res = re.compile('(?<=\\\)a')
>>> ms = res.match(r'\a')
>>> ms is None
True
Реальный пример:
Когда я parcing "my s\"tr"; 5;
как ms = res.match(r'"my s\"tr"; 5;')
, ожидаемый выход : "my s\"tr"
Ответ
Наконец stribizhev предоставил решение. Я думал, что мое первоначальное регулярное выражение менее вычислительно дорогой и единственный вопрос заключается в том, что она должна быть объявлена с использованием сырой строки:
>>> res = re.compile(r'"([^\n"]|(?<=\\)["\n])*"', re.UNICODE)
>>> ms = res.match(r'"my s\"tr"; 5;')
>>> print ms.group()
"my s\"tr"
Почему ты за 'Ā' ? Какова фактическая модель, которую вы пытаетесь сопоставить? – thefourtheye
попробуйте с '\\\\' вместо '\\\' – Morb
В «thefourtheye»: фактический шаблон: res = re.compile ('"([^ \ n"] | (? <= \\) ["\ n]) *" ') , чтобы соответствовать строкам типа: ms = res.match (' 'my s \ "tr"; 5;') В "Morb": '\\\\' анализируется , но не работает должным образом. – luart