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

标签 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(r'[a-zA-Z][a-zA-Z\d]*')

注意引号前的 r 以获得原始字符串,否则您需要转义所有反斜杠。

\s* before 是可选的,您可以删除它,例如捕获组。

如果你想确保匹配的前面没有数字,你可以这样写,后面有一个负向的(?<!...) :

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)

关于用于 alpha(alpha|digit)* 的 Python 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34700572/

相关文章:

php - 使用 HTMLPurifier 或正则表达式删除嵌套的 html 标签

utf-8 - 如何制作 flex(词法扫描仪)来读取 UTF-8 字符输入?

java - 使用 java 创建词法分析器程序的想法

javascript - 用于替换嵌套结构中匹配括号的正则表达式

python - C中 "for line in sys.stdin: "的替换是什么?

python - 在列表列表中查找索引和总和

regex - 我对正则表达式有些担心

regex - 只允许数字 AND 可以 'contain' 斜杠 AND 不能以斜杠开头或结尾

Python,namedtuple,扩展了基本零件库存系统

Python 环境变量中的环境变量