拆分不带非字符的字符串

时间:2012-02-12 05:06:02

标签: python split

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

':foo [bar]'

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

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

4 个答案:

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

我承认,'。join成语有点奇怪,但你几乎可以用英文阅读其余内容:“如果字符是字母数字或字符是空格,则加入s中字符的每个字符,然后拆分该”。

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

的内容
>>> s = ':foo [bar]'
>>> s.split()
[':foo', '[bar]']
>>> [word.strip(':[]') for word in s.split()]
['foo', 'bar']

答案 1 :(得分:1)

正常执行str.split(),然后解析每个元素以删除非字母。类似的东西:

>>> my_string = ':foo [bar]'
>>> parts = [''.join(c for c in s if c.isalpha()) for s in my_string.split()]
['foo', 'bar']

答案 2 :(得分:0)

您必须通过列表['foo','[bar]']并使用正则表达式删除所有非字母字符。查看Regex replace (in Python) - a simpler way?以获取示例和文档参考。

答案 3 :(得分:0)

您必须尝试regular expressions

使用re.sub()替换:,[,]个字符,然后将结果字符串拆分为white space作为分隔符。

>>> st = ':foo [bar]'
>>> import re
>>> new_st = re.sub(r'[\[\]:]','',st)
>>> new_st.split(' ')
['foo', 'bar']