How to use '\' in Python lookbehind assertion regex (?<=\\) to match C++-like quoted strings -
how can match r'\a' in python using lookbehind assertion?
 actually, need match c++ strings "a \" b" , 
"str begin \ end"   i tried:
>>> 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 none true   real example:
 when i'm parcing "my s\"tr"; 5; ms = res.match(r'"my s\"tr"; 5;'), expected output is: "my s\"tr"
answer
 stribizhev provided solution. thought initial regex less computationally expensive , issue should declared using raw string:
>>> res = re.compile(r'"([^\n"]|(?<=\\)["\n])*"', re.unicode) >>> ms = res.match(r'"my s\"tr"; 5;') >>> print ms.group() "my s\"tr"      
edit: final regex adaptation regex provided @ word aligned
i think looking regex:
(?s)"(?:[^"\\]|\\.)*"   see demo on regex101.
sample python code (tested on tutorialspoint):
import re p = re.compile(ur'(?s)"(?:[^"\\]|\\.)*"') ms = p.match('"my s\\"tr"; 5;') print ms.group(0)      
Comments
Post a Comment