簡體   English   中英

Python正則表達式匹配字符串選項

[英]Python Regular Expressions to match option of strings

我是Python和Python RE的新手。

我正在嘗試為ARM匯編代碼創建解析器。 我想使匹配條件分支指令的正則表達式可能是:

beq, bne, blt, bgt

我嘗試過表格的正則表達式

'b[eq|ne|lt|gt]'

但這不匹配。 有人可以幫我嗎?

您應該對選項而不是方括號使用括號:

b(eq|ne|lt|gt)

通常,您需要一個非捕獲組:

b(?:eq|ne|lt|gt)

您還可以使其更加優化:

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

方括號將被理解為任何字符或字符范圍。 因此[eq|ne|lt|gt]有效表示eq|任意一個。 ne (再次,因此變得多余)等。

嘗試以下模式: b(?:eq|ne|lt|gt)

  • [] 字符集 :將僅匹配括號內的任何一個字符。 您可以使用元字符-來指定字符范圍,例如: [ae] ,甚至可以使用元字符^來否定表達式,例如: [^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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM