我正在编写一个简单的 Sublime Text 插件,以修剪单词之间多余的、不必要的空格,但不触及前导空格,以免弄乱 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)
但它也删除了第一个和最后一个字母。
最佳答案
对于不匹配的前导空格意味着您想要匹配非空格字符后面的多个空格(并将其替换为单个空格),因此您可以替换 (?<=\S) +(?=\S)
带有单个空格“”。
说明:
(?<=\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
这应该很容易理解。不过,您可能需要对尾随空格处理进行一些调整。
请参阅“regular expressions 101”了解更多信息。
但是,正如关于您的意图的旁注: 这不是重新格式化代码的可靠方法。除了前导空格之外,还有许多重要的多重空格情况。最明显的一个是字符串文字中的空格。
关于python - 如何删除Python中单词之间的多个空格,而不需要前导空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59706997/