我有一个带有以下正则表达式的 python 脚本,用于从我的代码中的 NSLocalizedString 宏中获取两个字符串(可能包含转义引号):
NSLocalizedString\(@"(?:\\.|[^"\\]*)",\s*@"(?:\\.|[^"\\]*)"\s*\)
它在 RegexRx 中工作正常并且完全符合预期...
...但是,当我尝试像这样将它添加到我的 python 脚本时...
localizedStringComment = re.compile('NSLocalizedString\(@"(?:\\.|[^"\\]*)",\s*@"(?:\\.|[^"\\]*)"\s*\)', re.DOTALL)
...失败并显示以下消息...
Traceback (most recent call last):
File "../../localization_scripts/sr_genstrings.py", line 21, in <module>
localizedStringComment = re.compile('NSLocalizedString\(@"(?:\\.|[^"\\]*)",\s*@"(?:\\.|[^"\\]*)"\s*\)', re.DOTALL)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 190, in compile
return _compile(pattern, flags)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 244, in _compile
raise error, v # invalid expression
sre_constants.error: unexpected end of regular expression
似乎 python 需要在某个地方进行额外的转义,但我不知道在哪里。如果我向该行的最后一对添加额外的反斜杠,就像这样......
localizedStringComment = re.compile('NSLocalizedString\(@"(?:\\.|[^"\\]*)",\s*@"(?:\\.|[^"\\\\]*)"\s*\)', re.DOTALL)
...它运行时没有错误,但随后不匹配任何内容。任何帮助表示赞赏。
最佳答案
使用原始字符串文字:
re.compile(r'NSLocalizedString\(@"(?:\\.|[^"\\]*)",\s*@"(?:\\.|[^"\\]*)"\s*\)', re.DOTALL)
因为反斜杠在常规 Python 字符串中也有意义。原始字符串文字(以 r
为前缀的字符串文字)忽略 Python 支持的(大多数)转义序列。
参见 The Backslash Plague在 Python 正则表达式 HOWTO 中。
关于python - 为什么这个 python 正则表达式不能编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17882893/