[英]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]
有效表示e
, q
, |
任意一個。 , n
, e
(再次,因此變得多余)等。
嘗試以下模式: 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.