用于alpha(alpha | digit)的Python正则表达式*

时间:2016-01-10 00:22:24

标签: python regex lexical-analysis

我正在尝试生成一个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模块?

1 个答案:

答案 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)