我正在尝试生成一个python正则表达式来表示词法分析器的标识符。我的方法是:
([a-zA-Z]([a-zA-Z]|\d)*)
当我在:
中使用它时regex = re.compile("\s*([a-zA-Z]([a-zA-Z]|\d)*)")
regex.findall(line)
它不会产生像它应该的标识符列表。我是否错误地构建了表达式?
表示表单的好方法是什么:
alpha(alpha|digit)*
使用python re模块?
答案 0 :(得分:1)
regex = re.compile(r'[a-zA-Z][a-zA-Z\d]*')
注意引号前的r以获取原始字符串,否则需要转义所有反斜杠。
由于之前的\s*
是可选的,您可以将其删除,例如捕获组。
如果你想确保匹配前面没有数字,你可以像这样写一个带有负面的lookbehind (?<!...)
:
regex = re.compile(r'(?:^|(?<![\da-zA-Z]))[a-zA-Z][a-zA-Z\d]*')
请注意,对于re.compile
,您可以使用不区分大小写的选项:
regex = re.compile(r'(?:^|(?<![\da-z]))[a-z][a-z\d]*', re.I)