2013-07-09 22 views
0

什麼是下面的字符串的Python正則表達式?這個字符串的Python正則表達式

"111(A5)A05209(May)2005" 

我想要得到的值:

111 
    A5 
    A05209 
    May 
    2005 

謝謝!

+2

你知道...你應該張貼您嘗試爲好。請參閱[this](http://stackoverflow.com/help/how-to-ask)。 – Jerry

+0

該字符串的一個可能的(並且不重要的)正則表達式是'111 \(A5 \)A05209 \(May \)2005'。我認爲你正在尋找更可能的方式來分割字符串的一組分隔符(即''re.split()')... – twalberg

回答

1

使用re.findallstr.join

>>> import re 
>>> strs = "111(A5)A05209(May)2005" 
>>> print "\n".join(re.findall(r'\w+',strs)) 
111 
A5 
A05209 
May 
2005 

re.sub

>>> print re.sub(r'[\W]+','\n',strs) 
111 
A5 
A05209 
May 
2005 

另一種方法是str.translate

>>> from string import punctuation, whitespace, maketrans 
>>> intab = punctuation + whitespace 
>>> outtab = "\n"*len(intab) 
>>> print strs.translate(trantab) 
111 
A5 
A05209 
May 
2005 

在性能方面str.translate遠不如更好:

>>> strs = "111(A5)A05209(May)2005"*1000 
>>> %timeit "\n".join(re.findall(r'\w+',strs)) 
100 loops, best of 3: 2.19 ms per loop 
>>> %timeit re.sub(r'[\W]+','\n',strs) 
100 loops, best of 3: 4.43 ms per loop 
>>> %timeit strs.translate(trantab) 
10000 loops, best of 3: 93.9 us per loop 
+1

該死的!你再次挫敗我! :) –

2

最簡單的

s = " 111(A5)A05209(May)2005" 
s.replace('(', ' ').replace(')', ' ') 
values = s.split() 
>> ['111', 'A5', 'A05209', 'May', '2005'] 

的正則表達式的方法是

import re 
s = re.findall(r'\w+', s) 
>> ['111', 'A5', 'A05209', 'May', '2005'] 
5

只需使用re.split。可能是最直觀的方法。

>>> import re 
>>> re.split(r'[\(\)]', "111(A5)A05209(May)2005") 
['111', 'A5', 'A05209', 'May', '2005'] 
0
>>> str = '111(A5)A05209(May)2005' 
>>> print str.replace('(','\n').replace(')','\n') 
111 
A5 
A05209 
May 
2005 
相關問題