首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -如何通过空格将标点符号和单词区分开来,在标点符号和单词之间只留下一个空格?

Python -如何通过空格将标点符号和单词区分开来,在标点符号和单词之间只留下一个空格?
EN

Stack Overflow用户
提问于 2015-01-07 03:11:52
回答 5查看 4.7K关注 0票数 2

我有以下字符串:

代码语言:javascript
复制
input = "I love programming with Python-3.3! Do you? It's great... I give it a 10/10. It's free-to-use, no $$$ involved!"

除"/“、”‘“、"-”、"+“和"$”外,所有标点符号都应与单词分开。

因此,产出应该是:

代码语言:javascript
复制
"I love programming with Python-3 . 3 ! Do you ? It's great . . . I give it a 10/10. It's free-to-use , no $$$ involved !"

我使用了以下代码:

代码语言:javascript
复制
for x in string.punctuation:
    if x == "/":
        continue
    if x == "'":
        continue
    if x == "-":
        continue
    if x == "+":
        continue
    if x == "$":
        continue
    input = input.replace(x," %s " % x)

我得到以下输出:

代码语言:javascript
复制
I love programming with Python-3 . 3 !  Do you ?  It's great .  .  .  I give it a 10/10 .  It's free-to-use ,  no $$$ involved ! 

它起作用了,但问题是,它有时在标点符号和单词之间留出两个空格,例如在句子中的第一个感叹号和单词"Do“之间。这是因为他们之间已经有了一个空间。

这个问题也会出现在:with= "Hello. (hi)“中。产出如下:

代码语言:javascript
复制
" Hello .  ( hi ) "

请注意开括号前的两个空格。

我需要的输出只有一个空格之间的任何标点符号和单词,除了上面提到的5个标点符号,这是不分隔的词。我怎么才能解决这个问题?或者,是否有更好的方法使用regex来完成此操作?

提前谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-01-07 03:27:00

看来re可以帮你..。

代码语言:javascript
复制
>>> import re
>>> re.sub(r"([\w/'+$\s-]+|[^\w/'+$\s-]+)\s*", r"\1 ", input)
"I love programming with Python-3 . 3 ! Do you ? It's great ... I give it a 10/10 . It's free-    to-use , no $$$ involved ! "

代码语言:javascript
复制
>>> re.sub(r"([\w/'+$\s-]+|[^\w/'+$\s-]+)\s*", r"\1 ", "Hello. (hi)")
'Hello . ( hi ) '

如果尾随空间有问题,.rtrim(theresult, ' ')应该为您修复它:-)

票数 8
EN

Stack Overflow用户

发布于 2015-01-07 03:26:35

我可以试试这个方法吗?

代码语言:javascript
复制
>>> import string
>>> input = "I love programming with Python-3.3! Do you? It's great... I give it a 10/10. It's free-to-use, no $$$ involved!"
>>> ls = []
>>> for x in input:
...     if x in string.punctuation:
...         ls.append(' %s' % x)
...     else:
...         ls.append(x)
...
>>> ''.join(ls)
"I love programming with Python -3 .3 ! Do you ? It 's great . . . I give it a 10 /10 . It 's free -to -use , no  $ $ $ involved !"
>>>
票数 0
EN

Stack Overflow用户

发布于 2015-01-07 03:28:20

由于缺乏声誉而无法发表评论,但在这里

在句子中的第一个感叹号和单词"Do“之间

看起来有两个空格,因为之间已经有一个空格了!然后去做

好了!做

所以,如果标点符号后面已经有一个空格,不要再放一个空格。

此外,这里还有一个类似的问题:python regex inserting a space between punctuation and letters

所以也许可以考虑使用re

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27810884

复制
相关文章

相似问题

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