我有以下代码:
def commandType(self):
import re
print self.cmds[self.counter]
if re.match("@",self.cmds[self.counter]):
return Parser.A_COMMAND
elif re.match('(',self.cmds[self.counter]):
return Parser.L_COMMAND
else:
return Parser.C_COMMAND
并在此行:elif re.match('(',self.cmds[self.counter]):
我收到了错误。
我做错了什么?
答案 0 :(得分:9)
括号有special meaning in regular expressions。 You can escape the paren但是你根本不需要正则表达式来解决这个问题:
def commandType(self):
print self.cmds[self.counter]
if '@' in self.cmds[self.counter]):
return Parser.A_COMMAND
elif '(' in self.cmds[self.counter]:
return Parser.L_COMMAND
else:
return Parser.C_COMMAND
答案 1 :(得分:8)
括号'('
和')'
用作regexp中的分组机制和范围运算符。你必须通过反斜杠转义它们(和任何其他控制符号),例如'\('
。
答案 2 :(得分:0)
正则表达式的语言赋予(
(它用于启动组)的特殊含义。如果要匹配文字左括号,则需要使用反斜杠转义它:elif re.match(r'\(', ...
。
(为什么r'...'
而不仅仅是'...'
?因为在普通字符串中,反斜杠也用于转义控制字符等,你需要编写\\
来获得单个反斜杠因此你可以改为编写elif re.match('\\(', ...
。最好养成使用r'...'
字符串表示正则表达式的习惯 - 它不易出错。)