首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将标点符号替换为空格

将标点符号替换为空格
EN

Stack Overflow用户
提问于 2016-01-19 01:49:12
回答 6查看 44.3K关注 0票数 31

我有一个代码的问题,不知道如何继续前进。

代码语言:javascript
复制
tweet = "I am tired! I like fruit...and milk"
clean_words = tweet.translate(None, ",.;@#?!&$")
words = clean_words.split()

print tweet
print words

输出:

代码语言:javascript
复制
['I', 'am', 'tired', 'I', 'like', 'fruitand', 'milk']

我想要的是用空格替换标点符号,但不知道什么函数或循环使用。有谁能帮帮我吗?

EN

回答 6

Stack Overflow用户

发布于 2017-05-12 18:05:16

通过像这样改变你的"maketrans“很容易实现:

代码语言:javascript
复制
import string
tweet = "I am tired! I like fruit...and milk"
translator = string.maketrans(string.punctuation, ' '*len(string.punctuation)) #map punctuation to space
print(tweet.translate(translator))

它可以在我的运行python 3.5.2和2.x的机器上运行。希望它也能在你的应用中起作用。

票数 44
EN

Stack Overflow用户

发布于 2016-01-21 19:35:52

这是一个基于正则表达式的解决方案,已经在Python 3.5.1下进行了测试。我认为它既简单又简洁。

代码语言:javascript
复制
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)

结果:

代码语言:javascript
复制
I am tired! I like fruit...and milk
I am tired I like fruit and milk

紧凑版本:

代码语言:javascript
复制
tweet = "I am tired! I like fruit...and milk"
clean = re.sub(r"[,.;@#?!&$]+\ *", " ", tweet)
print(tweet + "\n" + clean)
票数 17
EN

Stack Overflow用户

发布于 2016-01-21 01:34:09

有几种方法可以解决这个问题。我有一个可以工作的,但我认为它是次优的。希望更了解正则表达式的人会出现并改进答案或提供更好的答案。

您的问题被标记为python-3.x,但是您的代码是python 2.x,所以我的代码也是2.x。我包含了一个在3.x中工作的版本。

代码语言:javascript
复制
#!/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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34860982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档