2012-09-15 3 views
14

Я хотел бы ЗАМЕНИТЬ (а не УДАЛИТЬ) все знаки препинания символом "" в строке в python. Есть ли что-то эффективное этого аромата:Как заменить знаки препинания на строку python?

text = text.translate(string.maketrans("",""), string.punctuation) 

благодаря регистр

+0

s = s.replace ('old', 'new') –

+0

Возможный дубликат [Лучший способ препинания строки из строки в Python] (http: // stackoverf low.com/questions/265960/best-way-to-strip-punctuation-from-a-string-in-python) –

+0

В чем разница между REMOVE и REPLACE без ничего? – wroniasty

ответ

36

Этот ответ является для Python 2 и будет работать только для ASCII строк:

Строковый модуль содержит две вещи, которые помогут вам: список знаков препинания актеров и «макетранс». Вот как вы можете их использовать:

import string 
replace_punctuation = string.maketrans(string.punctuation, ' '*len(string.punctuation)) 
text = text.translate(replace_punctuation) 
+2

Это самое быстрое решение, легко избивающее опцию регулярного выражения. –

+0

спасибо, это то, что я завязывал :) :) – register

+0

На сегодняшний день лучший ответ - быстрый и полный. :-) – ProfVersaggi

9

Модифицированный раствор из Best way to strip punctuation from a string in Python

import string 
import re 

regex = re.compile('[%s]' % re.escape(string.punctuation)) 
out = regex.sub(' ', "This is, fortunately. A Test! string") 
# out = 'This is fortunately A Test string' 
+0

Как бы вы держали апострофы, например, в слове нет? Я не хочу, чтобы апострофы были разделены, так что я остался с этим. –

+0

Вы можете удалить апостроф из string.punctuation (это, в свою очередь, строка, содержащая все знаки пунктуации). 'string.punctuation.replace (" '"," ")' ведет к ''!' # $% &() * +, -./:; <=>? @ [\\]^_ '{|} ~ ' – Gregor

+0

Это работает. –

0

заменить на ''? В чем разница между переводом всех ';' в '' и удалить все ';'? Здесь нужно удалить все ';'

s = 'dsda;;dsd;sad' 
table = string.maketrans('','') 
string.translate(s, table, ';') 

и вы можете сделать свою замену с перевести

+0

, который знает, почему я иногда не могу использовать стиль кода? – cheneydeng

0

В моем конкретном пути, я удалил "+" и "&" из списка пунктуации:

all_punctuations = string.punctuation 
selected_punctuations = re.sub(r'(\&|\+)', "", all_punctuations) 
print selected_punctuations 

str = "he+llo* ithis& place% if you * here @@" 
punctuation_regex = re.compile('[%s]' % re.escape(selected_punctuations)) 
punc_free = punctuation_regex.sub("",str) 
print punc_free 

результат: он + LLO ithis & место, если вы здесь

Смежные вопросы