0

我想拆分一个由分号、空格和逗号的任意组合分隔的字符串。例如:

输入:"Jan,Feb;Mar Apr, May;"

输出:["Jan","Feb","Mar","Apr","May"]

因为该split()方法将完全匹配您在其中指定的内容,这不是我需要的,所以我不能split()在这里简单地使用方法。有人可以帮我弄这个吗?

4

5 回答 5

7

使用re.split

>>> [s for s in re.split(r'[ ,;]', '"Jan","Feb";"Mar" "Apr", "May";') if s]
['"Jan"', '"Feb"', '"Mar"', '"Apr"', '"May"']

if s过滤掉空字符串。

于 2013-01-14T19:14:37.007 回答
3

re.findall这里看起来不错:

In [168]: strs='"Jan","Feb";"Mar" "Apr", "May";'

In [169]: import re

In [170]: re.findall(r'\w+',strs)
Out[170]: ['Jan', 'Feb', 'Mar', 'Apr', 'May']
于 2013-01-14T19:16:23.650 回答
2

通常正确的答案是正则表达式,但碰巧你可以split用方法和解决这个特殊问题replace

>>> s = "one two,three;four"
>>> s.replace(',',' ').replace(';',' ').split()
['one', 'two', 'three', 'four']

我认为Ashwini 的解决方案是最好的——与其尝试删除所有分离的杂物,不如搜索有用的内容。

于 2013-01-14T19:16:48.843 回答
1

还有一个优雅的非正则表达式解决方案,使用str.translate后跟str.split

>>> in_str = '"Jan","Feb";"Mar" "Apr", "May";'
>>> in_str.translate(None,",; ")[1:-1].split("\"\"")
['Jan', 'Feb', 'Mar', 'Apr', 'May']
于 2013-01-14T19:19:17.957 回答
0

试试这个:

import re

c = b'"Jan","Feb";"Mar" "Apr", "May"';
needle = r'("[^, ;]*")'
r = re.compile(needle)

months = r.findall(c)
print months
于 2013-01-14T19:16:16.843 回答