Обрезать пунктуацию в Python 2.x - PullRequest
1 голос
/ 14 января 2012

Я использую Python v2.6, и у меня есть строка, содержащая количество знаков препинания, которые я хотел бы удалить.Сейчас я посмотрел на использование функции string.punctuation(), но, к сожалению, я хочу убрать все знаки препинания, за исключением точек и тире.В целом, я хочу удалить только 5 знаков препинания - ()\"'

Есть предложения?Я бы хотел, чтобы это был самый эффективный способ.

Спасибо

Ответы [ 6 ]

1 голос
/ 14 января 2012

Вы можете составить список всех символов, которые вам не нужны:

unwanted = ['(', ')', '\\', '"', '\'']

Тогда вы можете сделать функцию strip_punctuation(s) примерно такой:

def strip_punctuation(s): 
    for u in unwanted: 
        s = s.replace(u, '')
    return s
1 голос
/ 14 января 2012

Вы можете использовать str.translate(table[, deletechars]) с table, установленным на None, что приведет к удалению всех символов из deletechars из строки:

s.translate(None, r"()\"'")

Некоторые примеры:

>>> "\"hello\" '(world)'".translate(None, r"()\"'")
'hello world'
>>> "a'b c\"d e(f g)h i\\j".translate(None, r"()\"'")
'ab cd ef gh ij'
1 голос
/ 14 января 2012
>>> import re
>>> r = re.compile("[\(\)\\\\'\"]")
>>> r.sub("", "\"hello\" '(world)'\\\\\\")
'hello world'
1 голос
/ 14 января 2012

Использование string.translate :

s = ''' abc(de)f\gh"i' '''
print(s.translate(None, r"()\"'"))
 # abcdefghi 

или re.sub :

import re
re.sub(r"[\\()'\"]",'',s)

но string.translate оказывается на порядок быстрее:

In [148]: %timeit (s*1000).translate(None, r"()\"'")
10000 loops, best of 3: 112 us per loop

In [146]: %timeit re.sub(r"[\\()'\"]",'',s*1000)
100 loops, best of 3: 2.11 ms per loop
0 голосов
/ 14 января 2012
my_string = r'''\(""Hello ''W\orld)'''
strip_chars = r'''()\'"'''

используя понимание:

''.join(x for x in my_string if x not in strip_chars)

с использованием фильтра:

''.join(filter(lambda x: x not in strip_chars, my_string))

выход:

Hello World
0 голосов
/ 14 января 2012

Вы можете создать наложение всех персонажей, которых хотите заменить, и заменить их на выбранный вами символ.

char_replace = {"'":"" , "(":"" , ")":"" , "\":"" , """:""}

for i,j in char_replace.iteritems():
        string = string.replace(i,j)
...