我在这里尝试了多种解决方案,虽然它们剥离了一些代码,但它们似乎并不适用于多个标点符号。 “[ 要么 ', 这段代码:
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
答案 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序列读数中的数字。