拆分不带非字符的字符串

Cos*_*Inc 4 python split

我试图拆分一个看起来像这样的字符串:

':foo [bar]'
Run Code Online (Sandbox Code Playgroud)

使用str.split()此当然返回[':foo','[bar]']

但是如何让它返回只['foo','bar']包含这些字符呢?

DSM*_*DSM 11

我不喜欢正则表达式,但是喜欢Python,所以我可能会写这个

>>> s = ':foo [bar]'
>>> ''.join(c for c in s if c.isalnum() or c.isspace())
'foo bar'
>>> ''.join(c for c in s if c.isalnum() or c.isspace()).split()
['foo', 'bar']
Run Code Online (Sandbox Code Playgroud)

我承认,'.join成语有点奇怪,但你几乎可以用英语阅读其余内容:"如果字符是字母数字或字符是空格,则将s中的字符连接到每个字符,然后将其拆分".

或者,如果您知道要删除的符号将始终位于外部并且该单词仍将以空格分隔,并且您知道它们是什么,您可能会尝试类似

>>> s = ':foo [bar]'
>>> s.split()
[':foo', '[bar]']
>>> [word.strip(':[]') for word in s.split()]
['foo', 'bar']
Run Code Online (Sandbox Code Playgroud)