2024-06-16 14:25:06 发布
网友
我是Python和Python RE的新手。在
我正在尝试为ARM汇编代码做一个解析器。我想用正则表达式来匹配条件分支指令,它可以是:
beq, bne, blt, bgt
我尝试了一个形式的正则表达式
但这不匹配。有人能帮我吗?在
尝试以下模式:b(?:eq|ne|lt|gt)
b(?:eq|ne|lt|gt)
[]字符集:只匹配方括号内的任何一个字符。您可以使用元字符-,例如:[a-e],或者甚至可以使用元字符^,例如:[^aeiou]
[]
-
[a-e]
^
[^aeiou]
()捕获父对象:用于对部分进行分组,以及创建数字捕获组,可以通过在捕获父对象中使用以下字符集?:,例如(?:)
()
?:
(?:)
如上所述,您应该使用capturing parentesis来匹配多个字符,因此,这就是使用brackets的模式与字符串不匹配的原因。在
capturing parentesis
brackets
请注意,使用non capturing parentesis意味着不保存任何匹配的数据,但是您可以删除元字符?:以捕获组。在
non capturing parentesis
由于python执行与perl兼容的正则表达式引擎,因此可以使用named captured groups & numbered backreferences,使用它的主要优点是使表达式易于维护、读取、编辑等
named captured groups & numbered backreferences
例如:
(?P<opcode>b(?:eq|ne|lt|gt))
opcode
选项应使用括号,而不是方括号:
b(eq|ne|lt|gt)
你通常需要一个非捕获组:
你也可以让它更优化一点:
b(?:eq|ne|[lg]t)
方括号将被理解为任何字符或字符范围。因此[eq|ne|lt|gt]有效地表示e、q、|、n、e(同样,它变得冗余)等之一
[eq|ne|lt|gt]
e
q
|
n
尝试以下模式:
b(?:eq|ne|lt|gt)
[]
字符集:只匹配方括号内的任何一个字符。您可以使用元字符-
,例如:[a-e]
,或者甚至可以使用元字符^
,例如:[^aeiou]
()
捕获父对象:用于对部分进行分组,以及创建数字捕获组,可以通过在捕获父对象中使用以下字符集?:
,例如(?:)
如上所述,您应该使用
capturing parentesis
来匹配多个字符,因此,这就是使用brackets
的模式与字符串不匹配的原因。在请注意,使用
non capturing parentesis
意味着不保存任何匹配的数据,但是您可以删除元字符?:
以捕获组。在由于python执行与perl兼容的正则表达式引擎,因此可以使用
named captured groups & numbered backreferences
,使用它的主要优点是使表达式易于维护、读取、编辑等例如:
(?P<opcode>b(?:eq|ne|lt|gt))
-将捕获模式b(?:eq|ne|lt|gt)
的匹配项到反向引用名opcode
选项应使用括号,而不是方括号:
你通常需要一个非捕获组:
^{pr2}$你也可以让它更优化一点:
方括号将被理解为任何字符或字符范围。因此
[eq|ne|lt|gt]
有效地表示e
、q
、|
、n
、e
(同样,它变得冗余)等之一相关问题 更多 >
编程相关推荐