如何基于分号,空格和逗号的任意组合在python中拆分字符串?

时间:2013-01-14 19:11:41

标签: python split

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

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

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

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

5 个答案:

答案 0 :(得分:7)

使用re.split

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

if s过滤掉空字符串。

答案 1 :(得分: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']

答案 2 :(得分:2)

一般来说,正确的答案是正则表达式,但是可以使用方法splitreplace来解决这个特定问题:

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

我认为Ashwini's solution是最好的 - 而不是尝试删除所有分离问题,只搜索有用的内容。

答案 3 :(得分:1)

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

>>> in_str = '"Jan","Feb";"Mar" "Apr", "May";'
>>> in_str.translate(None,",; ")[1:-1].split("\"\"")
['Jan', 'Feb', 'Mar', 'Apr', 'May']

答案 4 :(得分:0)

试试这个:

import re

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

months = r.findall(c)
print months