python:用空格填充标点符号(保留标点符号)
Posted
技术标签:
【中文标题】python:用空格填充标点符号(保留标点符号)【英文标题】:python: padding punctuation with white spaces (keeping punctuation) 【发布时间】:2011-04-08 10:30:56 【问题描述】:用空格填充标点符号的有效方法是什么?
输入:
s = 'bla. bla? bla.bla! bla...'
想要的输出:
s = 'bla . bla ? bla . bla ! bla . . .'
评论:
-
我不在乎标记之间有多少空格。 (但它们最终需要折叠起来)
我不想填充所有标点符号。假设我只对 .,!?() 感兴趣。
【问题讨论】:
<tiny details>
你不希望最后一个点后面有一个空格吗?
【参考方案1】:
您可以使用正则表达式匹配您感兴趣的标点字符并用空格将它们包围,然后使用第二步折叠文档中任意位置的多个空格:
s = 'bla. bla? bla.bla! bla...'
import re
s = re.sub('([.,!?()])', r' \1 ', s)
s = re.sub('\s2,', ' ', s)
print(s)
结果:
bla . bla ? bla . bla ! bla . . .
【讨论】:
【参考方案2】:如果你使用 python3,请使用 maketrans() 函数。
import string
text = text.translate(str.maketrans(key: " 0 ".format(key) for key in string.punctuation))
【讨论】:
【参考方案3】:如果一个空格不存在,这将只添加一个空格,并且不会破坏现有空格或其他空白字符:
s = re.sub('(?<! )(?=[.,!?()])|(?<=[.,!?()])(?! )', r' ', s)
这是通过在标点符号和非空格之间找到一个零宽度的位置,并在其中添加一个空格来实现的。
请注意,确实在字符串的开头或结尾添加了一个空格,但可以通过将环视更改为(?<=[^ ])
和(?=[^ ])
轻松完成。
实际操作:http://ideone.com/BRx7w
【讨论】:
这里是我没有复制太多代码的版本(我不懂任何 Python):ideone.com/PuVz5以上是关于python:用空格填充标点符号(保留标点符号)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用正则表达式 python3 替换除空格和换行符旁边的数字以外的所有其他符号