不带非字符的拆分字符串

2024-04-25 07:21:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试拆分一个类似这样的字符串,例如:

':foo [bar]'

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

但我如何才能使它只返回仅包含这些字符的['foo','bar']


Tags: 字符串foobar字符splitstr
3条回答

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

>>> my_string = ':foo [bar]'
>>> parts = [''.join(c for c in s if c.isalpha()) for s in my_string.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']

“”连接习惯用法有点奇怪,我承认,但您几乎可以用英语阅读其余部分:“如果字符是字母数字或是空白,请将s中字符的每个字符连接起来,然后将其拆分。”。

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

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

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

相关问题 更多 >