Как мне сопоставить r'\a' в Python с помощью проверки назад?
На самом деле мне нужно сопоставить строки C++, такие как "a \" b"
и
"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
Реальный пример:
когда я анализирую "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"
a
? Каков фактический образец, который вы пытаетесь сопоставить? - person thefourtheye   schedule 29.04.2015\\\\
вместо\\\
- person Morb   schedule 29.04.2015Match C++-like quoted strings regex
. Я пытался найти один и потерпел неудачу. - person Wiktor Stribiżew   schedule 29.04.2015