如何删除 Python 中单词之间的多个空格,不带前导空格

How to remove multiple spaces between words in Python, without the leading spaces

我正在编写一个简单的 Sublime Text 插件,用于 trim 额外的、不必要的单词之间的空格,但不触及前导空格,以免弄乱 Python 格式。

我有:

[spaces*******are********here]if****not***regions***and**default_to_all:

并想获得:

[spaces***are***still****here]if not regions and default_to_all:

考虑

regions = view.find_all('\w\s{2,}\w')
view.erase(edit, region)

但它也删除了第一个和最后一个字母。

如果我理解正确,这应该可以工作:

>>> r = re.compile(r'( *[\S]*)(?: +)(\n)?')
>>> s = '       if   not regions    and  default_to_all:\n     foo'
>>> r.sub(' ', s)
   if not regions and default_to_all:
 foo

对于不匹配的前导 spaces 意味着您要匹配多个 spaces 跟随一个非 space 字符(并将其替换为单个 space) , 因此您可以将 (?<=\S) +(?=\S) 替换为单个 space "</code>".</p> <p>解释:</p> <pre><code>(?<=\S) +(?=\S) (?<= Positive look-behind, which means preceded by... \S non-space character ) end of look-behind group + more than 1 space (?=\S) Positive look-ahead, which means followed by... non-space character end of look-ahead group

这应该很容易理解。不过,您可能需要稍微调整一下以进行尾随 space 处理。

有关详细信息,请参阅“regular expressions 101”。

但是,关于您的意图,请注意: 这不是重新格式化代码的可靠方法。除了前导 spaces 之外,还有许多重要的 multiple-spaces 案例。最明显的一个是字符串文字中的 spaces。