我想拆分一个由分号、空格和逗号的任意组合分隔的字符串。例如:
输入:"Jan,Feb;Mar Apr, May;"
输出:["Jan","Feb","Mar","Apr","May"]
因为该split()
方法将完全匹配您在其中指定的内容,这不是我需要的,所以我不能split()
在这里简单地使用方法。有人可以帮我弄这个吗?
使用re.split
:
>>> [s for s in re.split(r'[ ,;]', '"Jan","Feb";"Mar" "Apr", "May";') if s]
['"Jan"', '"Feb"', '"Mar"', '"Apr"', '"May"']
if s
过滤掉空字符串。
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']
通常正确的答案是正则表达式,但碰巧你可以split
用方法和解决这个特殊问题replace
:
>>> s = "one two,three;four"
>>> s.replace(',',' ').replace(';',' ').split()
['one', 'two', 'three', 'four']
我认为Ashwini 的解决方案是最好的——与其尝试删除所有分离的杂物,不如搜索有用的内容。
还有一个优雅的非正则表达式解决方案,使用str.translate
后跟str.split
>>> in_str = '"Jan","Feb";"Mar" "Apr", "May";'
>>> in_str.translate(None,",; ")[1:-1].split("\"\"")
['Jan', 'Feb', 'Mar', 'Apr', 'May']
试试这个:
import re
c = b'"Jan","Feb";"Mar" "Apr", "May"';
needle = r'("[^, ;]*")'
r = re.compile(needle)
months = r.findall(c)
print months