Python正则表达式来匹配字符串选项

2024-06-16 14:25:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python和Python RE的新手。在

我正在尝试为ARM汇编代码做一个解析器。我想用正则表达式来匹配条件分支指令,它可以是:

beq, bne, blt, bgt

我尝试了一个形式的正则表达式

^{pr2}$

但这不匹配。有人能帮我吗?在


Tags: 代码re解析器分支指令条件形式arm
2条回答

尝试以下模式: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

选项应使用括号,而不是方括号:

b(eq|ne|lt|gt)

你通常需要一个非捕获组:

^{pr2}$

你也可以让它更优化一点:

b(?:eq|ne|[lg]t)

方括号将被理解为任何字符或字符范围。因此[eq|ne|lt|gt]有效地表示eq|ne(同样,它变得冗余)等之一

相关问题 更多 >