我有一個軟件可以分析Verilog路徑並負責將這些路徑映射到一系列對象。問題是找到一個正則表達式來分割實例名稱序列中的Verilog路徑。使用Python在不同實例中分割verilog路徑的正則表達式模式
Verilog路徑是Verilog標識符與點連接的序列。每個標識符都是一個實例名稱。 「。」 A.B.C中的關係表示在模塊層次結構中,A是父項,B是A的子項之一。C是B的子項之一。
每個Verilog路徑標識模塊層次結構中的唯一實例。
僞代碼:
Verilog Identifier A
Verilog Identifier B
Verilog Identifier C
路徑父B的實例C作爲A的孩子:
A.B.C
現在,問題是Verilog的標識符可以是「字母的順序,數字,下劃線(_)和美元符號($)。標識符的第一個字符只能是字母或下劃線「如本頁所述:http://verilog.renerta.com/source/vrg00018.htm
這種情況的Python將能夠僅通過寫拆分路徑:
>>> path = "a.verilog.path"
>>> print path.split(".")
['a', 'verilog', 'path']
不幸的是標識符可以逃脫標識符。
轉義標識符以反斜槓開始並以空格結束。在反斜槓和空格中,可以有任何字符(空格除外),即使是點!
\an_escaped_identifier_that_ends_with_space
\another-identifier,withsome.dots)insideit_ending_withspace
因此,事情變得更加複雜,你不能再依賴分裂了。 下面是一個例子:
Verilog Identifier identifier1
Verilog Identifier \escaped.identifier_2
Verilog Identifier identifier3
路徑父\ escaped.identifier_2實例標記位是標記位的子:
identifier1.\escaped.identifier_2 .identifier3
那麼,我們如何可以使用Python re
模塊來解決所有可能的Verilog路徑由任意數字標識符和/或轉義標識符組成?
基於公認的答案我想我錯過了你的問題的東西,沒有你只是想匹配個人的Verilog標識符或幫了你一個正則表達式模式想要某種解決方案來將路徑解析爲單個標識符? –
好吧,我看到你現在正在努力改進這個答案,一般來說,SO的策略是不接受答案,除非你覺得它完全回答你的問題,甚至是持續24小時。一旦一個問題有一個被接受的答案,大多數用戶,比如我,就不會回答這個問題。有可能最快的答案可能相當不錯,但有更多時間的答案最終會變得更好。 https://meta.stackexchange.com/questions/9731/fastest-gun-in-the-west-problem –
我明白了,我同意。那麼關掉嘀嗒或保持現在的狀態是否更好? – auserdude