我目前正试图通过添加来提高我的一些python脚本的可读性 等号周围的空间。例如,目前的任务看起来像这样:
foo=4
bar[index]=4
我希望将其更改为:
foo = 4
bar[index] = 4
我已经找到了以下回答的问题Notepad++: Search and Replace with Regular Expression,这表明使用以下正则表达式"找到"应该工作:
(?<=[\w\]\)])=(?=\w)
Notepad ++正确地找到所有相应的等号,但它不会替换它们,无论我尝试用它们替换它们。我现在正在使用:
([\w\]\)])=(\w)
在&#34;找到什么&#34;连同:
\1 = \2
in&#34;替换为&#34;,即可完成工作。但是,我不明白为什么最初的正则表达式不起作用,特别是因为它(相当于它的东西)在链接的问题中被标记为正确。它在Notepad ++ 6.6.1或6.6.8中都不起作用。我对正则表达式不太熟悉,这是我第一次在Notepad ++中使用它们,所以我将不胜感激。
编辑:
澄清:我没有离开&#34;取而代之的是&#34;在我的任何尝试中字段都是空的,但总是用=
或其他字符串填充它。对于我最初的正则表达式,我没有使用\1 = \2
。
但我认为我已经确定了问题。到目前为止,我已经尝试了所有的建议,但它们似乎都没有起作用。但是一旦我点击&#34;替换所有&#34;而不是&#34;替换&#34;,Notepad ++确实正确地替换了所有内容,即使是我的初始正则表达式。我不确定这是否是预期的行为。
答案 0 :(得分:1)
该问题的接受答案仅包含搜索表达式。提问者留下了一条评论,指出替换字符串应该留空。这样做是删除匹配的内容。
你在这里要做的不是彻底删除=
运算符(因为这会破坏你的脚本非常灾难性的!),而只是空间填充它们。
你原来的正则表达式做了什么:
(?<=[\w\]\)])=(?=\w)
找到
的任何=
字符
\w
,]
或)
之一,如(?<=[\w\]\)])
和\w
,与(?=\w)
一样。 (?<=)
和(?=)
部分分别为lookbehind and lookahead assertions,而非capture groups。由于您的原始正则表达式无法捕获任何内容,因此替换为\1 = \2
将无法按预期工作。
在你的工作正则表达式中:
([\w\]\)])=(\w)
删除了?<=
和?=
令牌,这使得两个括号内的捕获组成为可能。这允许\1 = \2
反向引用工作,在第一次捕获,=
符号和第二次捕获之间插入空格。
在旁注(因为您已经找到了正常工作的解决方案),您仍然可以使原始正则表达式工作,但替换字符串应该只是=
被空格包围。由lookbehind和lookahead断言测试的东西实际上从未被拾取 - 匹配的唯一字符是=
符号本身 - 因此当你替换时它不会消失。
答案 1 :(得分:0)
使用您的初始正则表达式
正则表达式:
(?<=[\w\]\)])=(?=\w)
更换字符串:
=<space>
我添加了<space>
而不是。
Lookarounds将进行零宽度匹配。它不匹配任何字符。
答案 2 :(得分:0)
(?<=[\w\]\)])(=)(?=\w)
你可以用它。 替换
" \1 "
参见演示。
http://regex101.com/r/vY0rD6/2
你之前的正则表达式没有捕获模式。所以只是添加了它。
答案 3 :(得分:0)
在您的第一个正则表达式(?<=[\w\]\)])=(?=\w)
中,没有 捕获群组 ,因此您无法使用返回参考 strong> (替换为\1 = \2
)
但您可以使用 space = space 替换上面的正则表达式,其中空格是真正的空格字符。