0

以下字符串的 python 正则表达式是什么?

"111(A5)A05209(May)2005"

我想获取值:

   111
   A5
   A05209
   May
   2005

谢谢!

4

4 回答 4

5

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

>>> import re
>>> re.split(r'[\(\)]', "111(A5)A05209(May)2005")
['111', 'A5', 'A05209', 'May', '2005']
于 2013-07-09T19:45:46.217 回答
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']
于 2013-07-09T19:44:28.173 回答
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方面远远优于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
于 2013-07-09T19:44:12.827 回答
0
>>> str = '111(A5)A05209(May)2005'
>>> print str.replace('(','\n').replace(')','\n')
111
A5
A05209
May
2005
于 2013-07-09T20:03:02.943 回答