Python 在不使用正则表达式的情况下删除字符串中的标点和空格
我使用了importPython 在不使用正则表达式的情况下删除字符串中的标点和空格,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! @ …' >>
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']