Python 在不使用正则表达式的情况下删除字符串中的标点和空格

Python 在不使用正则表达式的情况下删除字符串中的标点和空格,python,string,python-3.x,punctuation,Python,String,Python 3.x,Punctuation,我使用了importstring和string.parantion,但在执行string.split()之后,我意识到我仍然有“…”。我还得到了”,我不知道为什么我在做条带()之后会得到它。据我所知,strip()会删除外围空间,因此如果字符串之间有空格,则无所谓: >>> s = 'a dog barks meow! @ … ' >>> s.strip() 'a dog barks meow! @ …' >>

我使用了import
string
string.parantion
,但在执行
string.split()
之后,我意识到我仍然有
“…”
。我还得到了
,我不知道为什么我在做
条带(
)之后会得到它。据我所知,
strip()
会删除外围空间,因此如果字符串之间有空格,则无所谓:

>>> s = 'a dog    barks    meow!   @  … '
>>> s.strip()
'a dog    barks    meow!   @  …'


>>> import string
>>> k = []
>>> for item in s.split():
...  k.append(item.strip(string.punctuation))
... 
>>> k
['a', 'dog', 'barks', 'meow', '', '…']
我想去掉
,“…”
,我想要的最终输出是
['a','dog','barks','meow']


我想避免使用正则表达式,但如果这是唯一的解决方案,我会考虑它。现在,我更感兴趣的是不使用正则表达式来解决这个问题。

您可以通过只保留字母数字字符和空格来删除标点:

s = 'a dog    barks    meow!   @  …'
print(''.join(c for c in s if c.isalnum() or c.isspace()).split())
这将产生:

['a', 'dog', 'barks', 'meow']
我使用了以下方法:

s = 'a dog    barks    Meow!   @  … '



import string
p = string.punctuation+'…'
k = []
for item in s.split():
    k.append(item.strip(p).lower())


k = [x for x in k if x]

基于以下公认答案:

或与单班轮相同(进口除外):

以字符列表的形式扫描字符串
s
,并根据lambda表达式的值(
ok
)将其分组(
grp
)。
if ok
过滤掉与lambda不匹配的组。这些组是迭代器,必须将它们转换为字符列表,然后连接起来以获取单词

的含义本质上是“字母数字”。根据您的用例,您可能更喜欢。在这两种情况下,对于此输入:

s = 'a 狗    barks    meow!   @  …'
输出是

['a', '狗', 'barks', 'meow']

(对于专家来说:这提醒了我们一个问题,不是所有语言中的单词都是由非单词字符分隔的-

我可以问一下您不想使用正则表达式的原因吗?您希望得到什么输出?@Aran Fey['a'、'dog'、'barks'、'meow']@MichaelH。如果项==“…”或“”:?
不是ASCII标点符号,因此,它不包括在
字符串中。标点符号
。见:
s = 'a 狗    barks    meow!   @  …'
['a', '狗', 'barks', 'meow']