【发布时间】:2018-11-27 20:02:13
【问题描述】:
我试图在标点符号和单词之间以标点符号开头或结尾的位置放置一个空格,但不在标点符号之间。根据我的发现,我能想到的最接近的是:
print(re.sub(r'([.,!?()\-])([^\s]+)', r'\g<1> \g<2>', '!hello 77e! - -world-view- world-view'))
print(re.sub(r'([^\s]+)([.,!?()\-])', r'\g<1> \g<2>', '!hello 77e! - -world-view- world-view'))
我得到的输出是:
! hello 77e! - - world-view- world- view
!hello 77e ! - -world-view - world -view
很接近,但我想要:
! hello 77e! - - world-view- world-view
!hello 77e ! - -world-view - world-view
在所需的输出中,“world-view”保持为“world-view”
我计划在字符串上使用两行代码,所以到最后我会得到类似的东西:
! hello 77e ! - - world-view - world-view
如果有办法在一行中做到这一点,那就太好了,但如果没有,那么有人可以告诉我如何调整这两行吗?
【问题讨论】:
-
试试
re.sub(r'(?<=(?<![^\W\d_])[.,!?()-])(?=[^\W\d_])|(?<=[^\W\d_])(?=[.,!?()-](?![^\W\d_]))', ' ', s)。见demo。 -
请让我知道该解决方案是否适合您,如果不适合,请在问题中添加更多示例。
-
是的,这完全有效
标签: python regex python-3.x