以下字符串的 python 正则表达式是什么?
"111(A5)A05209(May)2005"
我想获取值:
111
A5
A05209
May
2005
谢谢!
只需使用re.split
. 可能是最直观的方法。
>>> import re
>>> re.split(r'[\(\)]', "111(A5)A05209(May)2005")
['111', 'A5', 'A05209', 'May', '2005']
最简单的
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']
使用re.findall
和str.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
方面远远优于regex
:
>>> 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
>>> str = '111(A5)A05209(May)2005'
>>> print str.replace('(','\n').replace(')','\n')
111
A5
A05209
May
2005