如何使用re.findall查找字符串中的所有字符,包括特殊字符



如果我有这样的列表:

names = ['S. Planet', 'A. Planet-World', 'Dog World', 'Dog-Cat Planet']

我想用列表中的最后一个单词生成一个新列表,包括所有特殊字符,如下所示:

new_names = [['S.', 'Planet'], ['A.', 'Planet-World'], ['Dog', 'World'], ['Dog-Cat', 'Planet']]

我的代码看起来是这样的,但我不知道如何查看特殊字符。我该如何修复这个小东西?我是Python的新手,还在学习。

new_names = [(re.findall(r"([a-zA-Z]+)", x)) for x in names]
print(new_names)
#[['S', 'Planet'], ['A', 'Planet', 'World'], ['Dog', 'World'], ['Dog', 'Cat', 'Planet']]

如果有任何帮助,我将不胜感激。非常感谢。

我会采取不同的做法。在我看来,你所做的一切都是按空间分割,所以只看这一点,而不是试图弄清楚如何处理特殊的角色是有意义的。

names = ['S. Planet', 'A. Planet-World', 'Dog World', 'Dog-Cat Planet']
new_names = map(str.split, names)

由于我不确定使用映射/函数式编程有多普遍,我将解释它的作用。Map的效果与遍历列表,然后将函数(在本例中为str.split函数(应用于每个元素的效果相同。这样做的结果将作为一个新对象返回,该对象可以强制转换为列表。

您只需像这样使用str.split()方法:

new_names = [name.split() for name in names]

输出:

[
['S.', 'Planet'],
['A.', 'Planet-World'],
['Dog', 'World'],
['Dog-Cat', 'Planet']
]

最新更新