多个标点符号剥离

时间:2012-09-11 18:04:39

标签: python regex string punctuation

我在这里尝试了多种解决方案,虽然它们剥离了一些代码,但它们似乎并不适用于多个标点符号。 “[ 要么 ', 这段代码:

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

我来自:  Best way to strip punctuation from a string in Python很好,但我仍遇到双重标点问题。 我添加了While循环以希望对每个单词进行迭代以删除多个标点,但这似乎不起作用它只是卡在第一项“[并且不会退出

我是否只是错过了一些我只是被遗忘的明显作品?

我通过添加冗余和双循环列表解决了这个问题,由于设置相当大,这需要非常长的时间(在分钟内)

我使用Python 2.7

3 个答案:

答案 0 :(得分: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子句不是必需的,可以完全省略。

答案 1 :(得分: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'

答案 2 :(得分:0)

这是一个简单的方法:

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

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