Python 拆分不带非字符的字符串
我正在尝试拆分一个如下所示的字符串,例如:Python 拆分不带非字符的字符串,python,split,Python,Split,我正在尝试拆分一个如下所示的字符串,例如: ':foo [bar]' 使用str.split() 但是我怎样才能让它返回只包含这些字符的['foo','bar']?您必须通过列表['foo','bar]]并使用正则表达式除去所有非字母字符。检查示例和文档参考 你必须试一试 用于替换:、[,]字符,并使用white space分隔结果字符串 >>> st = ':foo [bar]' >>> import re >>> new_st = re
':foo [bar]'
使用str.split()
但是我怎样才能让它返回只包含这些字符的['foo','bar']
?您必须通过列表['foo','bar]]
并使用正则表达式除去所有非字母字符。检查示例和文档参考 你必须试一试
用于替换:、[,]
字符,并使用white space
分隔结果字符串
>>> st = ':foo [bar]'
>>> import re
>>> new_st = re.sub(r'[\[\]:]','',st)
>>> new_st.split(' ')
['foo', 'bar']
我不喜欢正则表达式,但喜欢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']
按常规执行str.split()
,然后解析每个元素以删除非字母。比如:
>>> my_string = ':foo [bar]'
>>> parts = [''.join(c for c in s if c.isalpha()) for s in my_string.split()]
['foo', 'bar']
这可能比我的答案(少两个循环)更有效,尽管我个人觉得“删除不需要的字符,然后拆分”的逻辑更难理解。不知道为什么。:-)这样可能会得到一些空字符串部分。最好在拆分之前删除非字母。