2015-12-29 47 views
-3

我有这样的正则表达式/ Python代码:Python的正则表达式:sre_constants.error:不平衡括号

REGISTRY_REGEX = re.compile("((HKEY(?:_\w+)+|HK[CLU][RUMC])\\([a-zA-Z\d\/\\.{}\s-]+))") 

这应该符合这个字符串:

HKLM\SYSTEM\CurrentControlSet\Services\aRandomServiceName 

当我运行我的python脚本,它返回:

Traceback (most recent call last): 
    File "regex_id.py", line 11, in <module> 
    REGISTRY_REGEX = re.compile("((HKEY(?:_\w+)+|HK[CLU][RUMC])\\([a-zA-Z\d\/\\.{}\s-]+)))") 
    File "/usr/lib/python2.7/re.py", line 194, in compile 
    return _compile(pattern, flags) 
    File "/usr/lib/python2.7/re.py", line 251, in _compile 
    raise error, v # invalid expression 
sre_constants.error: unbalanced parenthesis 

这个正则表达式似乎在RegExr中工作,我错过了什么?

+3

中的问题,并在堆栈跟踪正则表达式是不同的。堆栈跟踪中的最后有''''。 – ndn

+1

UNESCAPE的(.. –

+0

我试过你的模式前添加'r'这样说:'re.compile(R“((HKEY(?:_ \ w +)+ |香港[CLU] [RUMC])\\ ([A-ZA-Z \ d \/\\ {} \ S - ] +)))“)'有错误信息不见了 –

回答

3

首先,您的问题中的表达式和回溯中的表达式是不同的。前者有两个右括号,后者有三个。

第二个问题是,两个都有太多的右括号。由于使用的是双引号,所有的反斜线越来越之前取代通过重新被编译。

的解决方案是使用原始字符串,以便您的反斜杠没有得到取代两次:

REGISTRY_REGEX = re.compile(r"((HKEY(?:_\w+)+|HK[CLU][RUMC])\\([a-zA-Z\d\/\\.{}\s-]+))")