2015-05-19 41 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威的回应。