Python alpha(alpha|digit) 的正则表达式*
Python Regex for alpha(alpha|digit)*
我正在尝试生成一个 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(r'[a-zA-Z][a-zA-Z\d]*')
注意引号前的 r 以获得原始字符串,否则您需要转义所有反斜杠。
因为之前的 \s*
是可选的,你可以删除它,就像捕获组一样。
如果你想确保匹配前面没有数字,你可以这样写,并带有负向后视(?<!...)
:
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)
我正在尝试生成一个 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(r'[a-zA-Z][a-zA-Z\d]*')
注意引号前的 r 以获得原始字符串,否则您需要转义所有反斜杠。
因为之前的 \s*
是可选的,你可以删除它,就像捕获组一样。
如果你想确保匹配前面没有数字,你可以这样写,并带有负向后视(?<!...)
:
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)