我正在嘗試正確提取方法定義,這些定義由使用正則表達式的COM接口的comtypes生成。而且其中一些是空白的,這對我造成了更多的問題。我如何使用Python Regex來做到這一點?
基本上我有這樣的:
IXMLSerializerAlt._methods_ = [
COMMETHOD([helpstring(u'Loads an object from an XML string.')], HRESULT, 'LoadFromString',
(['in'], BSTR, 'XML'),
(['in'], BSTR, 'TypeName'),
(['in'], BSTR, 'TypeNamespaceURI'),
(['retval', 'out'], POINTER(POINTER(IUnknown)), 'obj')),
]
class EnvironmentManager(CoClass):
u'Singleton object that manages different environments (collections of configuration information).'
_reg_clsid_ = GUID('{8A626D49-5F5E-47D9-9463-0B802E9C4167}')
_idlflags_ = []
_typelib_path_ = typelib_path
_reg_typelib_ = ('{5E1F7BC3-67C5-4AEE-8EC6-C4B73AAC42ED}', 1, 0)
INumberFormat._methods_ = [
]
我想提取兩個IXMLSerializerAlt和INumberFormat方法定義,但是我不能想出一個合適的正則表達式。例如。對於IXMLSerializer我想提取這樣的:
IXMLSerializerAlt._methods_ = [
COMMETHOD([helpstring(u'Loads an object from an XML string.')], HRESULT, 'LoadFromString',
(['in'], BSTR, 'XML'),
(['in'], BSTR, 'TypeName'),
(['in'], BSTR, 'TypeNamespaceURI'),
(['retval', 'out'], POINTER(POINTER(IUnknown)), 'obj')),
]
此正則表達式在我的腦海這應該工作:
^\w+\._methods_\s=\s\[$
(^.+$)*
^]$
進出口檢查我的正則表達式的使用科多獸,但是我不能想出一個辦法,使這項工作。
您正則表達式中包含美元在無效的地方,比如在它的第一行結束,所以它不能匹配。另一個問題是方括號嵌套在上面的語法中,所以使用單個正則表達式並不容易。 – fviktor 2010-05-08 23:29:54
@fviktor:如果啓用多行匹配('m'或're.MULTILINE'標誌),則美元可以到達任何地方 - 美元在行尾匹配。至於嵌套的方括號,他選擇了一個不太完美的解決方案,它只需匹配一個線條上的一個方形支架即可。 – 2010-05-08 23:31:46
我知道這不是你確切的問題,但是直接從'comtypes'提取這些信息而不解析接口定義會更容易嗎? – fviktor 2010-05-08 23:33:41