2015-05-19 67 views
0

我有一個字符串模式(對於xml測試報告)按以下模式:解析字符串模式 - Python的

'testsets.testcases.[testset].[testcase]-[date-stamp]' 

例如:

a='testsets.testcases.test_different_blob_sizes.TestDifferentBlobSizes-20150430130436' 

我知道,我總是可以解析testsettestcase名做:

temp = a.split("-")[0] 
current = temp.split(".") 
testset = '.'.join(current[:-1]) + ".py" 
testcase = current[-1] 

然而,我想要使用更加pythonic的方式來完成,如regex或任何其他表達式,我會在一行中做到這一點。我怎麼能做到這一點?

+0

[Python正則表達式示例]的可能重複(http://stackoverflow.com/questions/11171045/python-regular-expression-example) –

+0

你突然開始使用什麼's'和它的'name' ? –

+0

@MalikBrahimi對不起會更新這個問題 – cybertextron

回答

3

你可以試試:

testset, testcase = re.search('(.*)\.(.*)-.*', a).group(1, 2) 
testset += '.py' 

re.search返回上匹配的MatchObject,它有一個group方法,我們可以用它來提取匹配組進行正則表達式(「()」 S在正則表達式)。

+0

錢!謝謝您的幫助! – cybertextron

+0

@philippe:很高興幫助:-) –

+0

這是一個不正確的正則表達式。看看括號在某個字符串中表示所需組的OP。 –

2

只需使用從正則表達式中獲得的groups搜尋組:

data = re.search(r'.+\..+\.(.+)\.(.+)-(\d+)', string).groups() 
0

如果嚴格想拔出測試集和測試用例,即「test_different_blob_sizes」和「TestDifferentBlobSizes」,作爲第一你的問題的一部分,你可以這樣做:

testset, testcase = re.split('[.-]',s)[2:4]

對於基於你所擁有的緊湊基於正則表達式代碼,請參閱Ziyao威的迴應。