在 python 上给定以下字符串:
foo bar
我一直试图只删除“foo”和“bar”之间重复出现的空格,并只用一次空格替换它,但留下第一个缩进/空格。
foo bar
我已经尝试了以下正则表达式,通常它以意外结果结束。
[\s]+ # which selects all spaces
foobar
[\w][\s]+ # which selects the first characters and following spaces
fobar
有没有办法使用正则表达式来完成这个?
编辑:抱歉!可能还不清楚,但字符串可能会有所不同,因为我的主要目标是只删除句子中重复出现的空格而不影响缩进! 再次编辑:StackOverflow 上已经提出的其他问题的区别在于我希望保留开头的空格而不是删除所有空格。 该项目是读取带有缩进的 txt 文件并删除 txt 文件中的所有空格。
最佳答案
您可以使用环视正则表达式:
>>> s = ' foo bar '
>>> print re.sub(r'(?<=\S)\s+(?=\S)', ' ', s)
foo bar
-
(?<=\S)
: 回头断言我们之前有非空格 -
\s+
: 匹配 1+ 个空格 -
(?=\S)
: 向前看,断言我们前面没有空间
或者,您也可以使用捕获组:
>>> print re.sub(r'(\S)\s+(\S)', r'\1 \2', s)
foo bar
关于Python 正则表达式 : Internal reoccurring spaces only,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46924055/