Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 拆分不带非字符的字符串_Python_Split - Fatal编程技术网

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']

这可能比我的答案(少两个循环)更有效,尽管我个人觉得“删除不需要的字符,然后拆分”的逻辑更难理解。不知道为什么。:-)这样可能会得到一些空字符串部分。最好在拆分之前删除非字母。