使用Notepad ++的正则表达式在等号周围添加空格的困难

时间:2014-08-27 11:25:51

标签: regex notepad++

我目前正试图通过添加来提高我的一些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 ++确实正确地替换了所有内容,即使是我的初始正则表达式。我不确定这是否是预期的行为。

4 个答案:

答案 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将进行零宽度匹配。它不匹配任何字符。

DEMO

答案 2 :(得分:0)

  (?<=[\w\]\)])(=)(?=\w)

你可以用它。 替换

 " \1 "

参见演示。

http://regex101.com/r/vY0rD6/2

你之前的正则表达式没有捕获模式。所以只是添加了它。

答案 3 :(得分:0)

在您的第一个正则表达式(?<=[\w\]\)])=(?=\w)中,没有 捕获群组 ,因此您无法使用返回参考 strong> (替换为\1 = \2

但您可以使用 space = space 替换上面的正则表达式,其中空格是真正的空格字符。