2016-01-18 2 views
4

У меня проблема с кодом и не могу понять, как двигаться вперед.замените знаки препинания пробелами

tweet = "I am tired! I like fruit...and milk" 
clean_words = tweet.translate(None, ",.;@#?!&$") 
words = clean_words.split() 

print tweet 
print words 

Выход:

['I', 'am', 'tired', 'I', 'like', 'fruitand', 'milk'] 

То, что я хотел бы, чтобы заменить знаки препинания с пробелами, но не знаю, что функции или использование цикла. Кто-нибудь может мне помочь?

ответ

0

Существует несколько способов решения этой проблемы. У меня есть тот, который работает, но считаю, что он субоптимален. Надеюсь, кто-то, кто знает регулярное выражение лучше, придет и улучшит ответ или предложит лучший.

Ваш вопрос помечен как python-3.x, но ваш код - python 2.x, поэтому мой код равен 2.x. Я включаю версию, которая работает в 3.x.

#!/usr/bin/env python 

import re 

tweet = "I am tired! I like fruit...and milk" 
# print tweet 

clean_words = tweet.translate(None, ",.;@#?!&$") # Python 2 
# clean_words = tweet.translate(",.;@#?!&$") # Python 3 
print(clean_words) # Does not handle fruit...and 

regex_sub = re.sub(r"[,.;@#?!&$]+", ' ', tweet) # + means match one or more 
print(regex_sub) # extra space between tired and I 

regex_sub = re.sub(r"\s+", ' ', regex_sub) # Replaces any number of spaces with one space 
print(regex_sub) # looks good 
0

Я не уверен, что я полностью понимаю ваши требования, но вы считаете, добавив только один больше строку в текущий код, как:

>>> a=['I', 'am', 'tired', 'I', 'like', 'fruitand', 'milk'] 
>>> " ".join(a) 
'I am tired I like fruitand milk' 

Является ли это то, что вы просите или вам нужно что-то более конкретно? С уважением.

+0

Это не отвечает на вопрос пользователя, это довольно просто: «Я бы хотел заменить знак препинания пробелом» Исходный запрос: 'tweet =" Я устал! Мне нравятся фрукты .. .and milk "' – magnum87

1

Если вы используете Python 2.x вы можете попробовать:

import string 

tweet = "I am tired! I like fruit...and milk" 
clean_words = tweet.translate(string.maketrans("",""), string.punctuation) 

print clean_words 

Для Python 3.x это работает:

import string 

tweet = "I am tired! I like fruit...and milk" 
transtable = str.maketrans('', '', string.punctuation) 
clean_words = tweet.translate(transtable) 

print(clean_words) 

Эти части кода удаляет все символы пунктуации из строки ,

+2

это заменяет пунктуацию на None, в результате чего появляется одно слово 'fruitand'. Пользователь должен быть осторожным, если он хочет заменить его пространством –

1

Ниже вы найдете решение на основе регулярного выражения, которое было протестировано под Python 3.5.1. Я думаю, что это просто и красно.

import re 

tweet = "I am tired! I like fruit...and milk" 
clean = re.sub(r""" 
       [,.;@#?!&$]+ # Accept one or more copies of punctuation 
       \ *   # plus zero or more copies of a space, 
       """, 
       " ",   # and replace it with a single space 
       tweet, flags=re.VERBOSE) 
print(tweet + "\n" + clean) 

Результаты:

I am tired! I like fruit...and milk 
I am tired I like fruit and milk 

Компактная версия:

tweet = "I am tired! I like fruit...and milk" 
clean = re.sub(r"[,.;@#?!&$]+\ *", " ", tweet) 
print(tweet + "\n" + clean) 
4

Это легко достигается путем изменения "maketrans", как это:

import string 
tweet = "I am tired! I like fruit...and milk" 
translator = str.maketrans(string.punctuation, ' '*len(string.punctuation)) #map punctuation to space 
print(tweet.translate(translator)) 

Он работает на моя машина работает с python 3.5.2. Надеюсь, что он тоже работает на вас.

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