如何删除 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。
我正在编写一个简单的 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。