Python 正则表达式整数识别错误

Python 正则表达式整数识别错误,python,regex,binary,integer,Python,Regex,Binary,Integer,我正在用python为C编写laxer,并面临以下问题: 这是我用来识别整数的函数: def t_INT_CONSTANT(t): r'(\d+ | 0b[0-1]+)' t.type = reserved_map.get(t.value,"INT_CONSTANT") return t 我用它来标识十进制和二进制整数 问题在于,当表达式为0b101010时,它将生成0 int和b101010标识符(在该标识符之上定义的另一个函数) 它与以下各项配合良好: #r'(0b[0-1]+

我正在用python为C编写laxer,并面临以下问题:

这是我用来识别整数的函数:

def t_INT_CONSTANT(t):
  r'(\d+ | 0b[0-1]+)'
  t.type = reserved_map.get(t.value,"INT_CONSTANT")
  return t
我用它来标识十进制和二进制整数

问题在于,当表达式为0b101010时,它将生成0 int和b101010标识符(在该标识符之上定义的另一个函数)

它与以下各项配合良好:

#r'(0b[0-1]+ | \d+)'

1号有什么问题?为什么第二个工作

请注意,与第一个模式匹配的字符(即,在
|
之前存在的模式)将不会与第二个模式匹配(位于
|
右侧的模式)

如果使用
\d+\0b[0-1]+
regex,则第一个
\d+
应该与
0b101010
中的
0
匹配,该
0
正好位于
b
之前。当正则表达式引擎使用第二种模式时,
0b[0-1]+
,它将找不到任何匹配项

如果您反转像
0b[0-1]+\d+
这样的模式,现在它首先检查
0b[0-1]+
。因此,根据优先级放置模式。左侧的图案优先于右侧的图案