如何检测代码内的多个空格而不是行首
How to detect multiple spaces inside code and not at the beginning of line
我尝试重构 python 别人写的代码。 QA 不需要制表符,因此我用四个白色 space 替换了它们,但代码中也使用了很多制表符,而且不仅用于行首的缩进。
这是一段示例代码:
def post(self, request, format=None):
action = request.query_params.get('action', None)
res = 'UNKNOWN ACTION'
hhtpstatus = status.HTTP_400_BAD_REQUEST
我试过这些正则表达式:
[^\S]([ ]{2,})[^\S]
这个 select 正确地包含了代码中的多个 space,但是 select 也是用于缩进的代码,这是我不想要的。如果我使用这个,我会松开缩进...
[^\s]([ ]{2,})[^\S]
这个比较好,代码里面只有select多个space,但是取了前面代码的最后一个字符,显然我两个都不想要。如果我使用它,我会通过在最后一个字符后面加上多个 space 来破坏所有代码...
我在 Atom 工作,正则表达式应该只检测代码之前和之后的代码包含的多个白色 space,而 select 只检测 space,所以我可以用单个 space
替换它们
我也试过 [^\W]
和 [^\w]
但不太成功:小资本仍然检测缩进 spaces,和 select 所有非单词代码字符 (, := 等等)。大写字母select只有space后面的字,没有space后面的其他码字,而且select也是多个space前面的最后一个字字符。 ..
有没有办法使用[^\s]([ ]{2,})[^\S]
,它只能正确检测代码中的多个space,但将其修改为contain/select ONLY spaces , 而不是最后一个前面的代码字符?因此,select一个字符后开始,如果这有意义的话...
您可以将 [^\s]
更改为 \S
并将 [^\S]
更改为 \s
并声明它们而不是使用环视。
如果匹配1个或多个space,并在右侧断言单个space,则替换为空字符串时将保留1个space。
(?<=\S)[ ]+(?=\s)
如果你不想在后面没有白色space字符时匹配最后的spaces,你可以匹配2个或更多spaces并断言一个非白色 space 字符在右边。
然后在替换中你可以使用单个 space.
(?<=\S)[ ]{2,}(?=\S)
我尝试重构 python 别人写的代码。 QA 不需要制表符,因此我用四个白色 space 替换了它们,但代码中也使用了很多制表符,而且不仅用于行首的缩进。
这是一段示例代码:
def post(self, request, format=None):
action = request.query_params.get('action', None)
res = 'UNKNOWN ACTION'
hhtpstatus = status.HTTP_400_BAD_REQUEST
我试过这些正则表达式:
[^\S]([ ]{2,})[^\S]
这个 select 正确地包含了代码中的多个 space,但是 select 也是用于缩进的代码,这是我不想要的。如果我使用这个,我会松开缩进...
[^\s]([ ]{2,})[^\S]
这个比较好,代码里面只有select多个space,但是取了前面代码的最后一个字符,显然我两个都不想要。如果我使用它,我会通过在最后一个字符后面加上多个 space 来破坏所有代码...
我在 Atom 工作,正则表达式应该只检测代码之前和之后的代码包含的多个白色 space,而 select 只检测 space,所以我可以用单个 space
替换它们我也试过 [^\W]
和 [^\w]
但不太成功:小资本仍然检测缩进 spaces,和 select 所有非单词代码字符 (, := 等等)。大写字母select只有space后面的字,没有space后面的其他码字,而且select也是多个space前面的最后一个字字符。 ..
有没有办法使用[^\s]([ ]{2,})[^\S]
,它只能正确检测代码中的多个space,但将其修改为contain/select ONLY spaces , 而不是最后一个前面的代码字符?因此,select一个字符后开始,如果这有意义的话...
您可以将 [^\s]
更改为 \S
并将 [^\S]
更改为 \s
并声明它们而不是使用环视。
如果匹配1个或多个space,并在右侧断言单个space,则替换为空字符串时将保留1个space。
(?<=\S)[ ]+(?=\s)
如果你不想在后面没有白色space字符时匹配最后的spaces,你可以匹配2个或更多spaces并断言一个非白色 space 字符在右边。
然后在替换中你可以使用单个 space.
(?<=\S)[ ]{2,}(?=\S)