0

我在这里尝试了多种解决方案,尽管它们剥离了一些代码,但它们似乎不适用于多个标点符号。"[ 或 ',此代码:

regex = re.compile('[%s]' % re.escape(string.punctuation))
    for i in words:
        while regex.match(i):
            regex.sub('', i)

我来自: 从 Python 中的字符串中去除标点符号的最佳方法很好,但我仍然遇到双标点符号的问题。我添加了While循环以希望对每个单词进行迭代以删除多个标点符号,但这似乎不起作用它只是卡在第一项“[并且不退出它

我只是错过了一些明显的部分,我也只是忘记了吗?

我通过添加冗余和双循环我的列表解决了这个问题,由于相当大的集合,这需要很长时间(甚至几分钟)

我使用 Python 2.7

4

3 回答 3

3

您的代码不起作用,因为regex.match需要字符串的开头完整的字符串来匹配。

此外,您没有对regex.sub(). sub不起作用,但您需要将其结果分配给某些东西。

regex.search如果在字符串中的任何位置找到该模式并按预期工作,则返回匹配项:

import re
import string

words = ['a.bc,,', 'cdd,gf.f.d,fe']

regex = re.compile('[%s]' % re.escape(string.punctuation))
for i in words:
    while regex.search(i):
        i = regex.sub('', i)
    print i

编辑:正如@senderle 在下面指出的那样,while 子句不是必需的,可以完全省略。

于 2012-09-11T18:38:26.617 回答
2

这将取代所有不是字母数字的东西......

re.sub("[^a-zA-Z0-9 ]","",my_text)


>>> re.sub("[^a-zA-Z0-9 ]","","A [Black. Cat' On a Hot , tin roof!")
'A Black Cat On a Hot  tin roof'
于 2012-09-11T18:10:02.513 回答
0

这是一个简单的方法:

>>> print str.translate("My&& Dog's {{{%!@#%!@#$L&&&ove Sal*mon", None,'~`!@#$%^&*()_+=-[]\|}{;:/><,.?\"\'')
>>> My Dogs Love Salmon

使用这个 str.translate 函数将消除标点符号。我通常用它来消除 DNA 序列读数中的数字。

于 2012-09-11T19:44:00.073 回答