alpha的Python正则表达式(alpha |位)*
我试图生成一个python正则表达式来表示词汇分析器的标识符。我的做法是:alpha的Python正则表达式(alpha |位)*,python,regex,lexical-analysis,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模块?如下所示: regex = re.compile(
([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模块?如下所示:
regex = re.compile(r'[a-zA-Z][a-zA-Z\d]*')
注意引号前的r以获得原始字符串,否则需要转义所有反斜杠
因为前面的\s*
是可选的,所以您可以删除它,就像删除捕获组一样
如果要确保匹配前面没有数字,可以这样编写,并使用负查找(?:
您的正则表达式很好,但有一些提示:您应该在正则表达式字符串前面加上r
,使其成为原始字符串文字。此外,除非必须,否则不应该使用捕获组,如果需要使用括号,只需使用(?:…)
语法即可。试试看
regex = re.compile(r'(?:^|(?<![\da-zA-Z]))[a-zA-Z][a-zA-Z\d]*')
regex = re.compile(r'(?:^|(?<![\da-z]))[a-z][a-z\d]*', re.I)