如何在Notepad++中使用正则表达式捕获和替换字符串

6

我尝试在notepad++中使用正则表达式捕获和替换字符串,但结果并不如预期。数据库的格式如下:

(602, '0602', '[{"id":"9","value":""},{"id":"1","value":"1"}]'),
(1644, '0164', '[{"id":"9","value":""},{"id":"1","value":"3"}]'),
(1311, '0131', '[{"id":"9","value":""},{"id":"1","value":"100"}]'),
(1321, '0132', '[{"id":"9","value":""},{"id":"1","value":"150"}]')

任务是捕获并放置第二列(值为0602、0164、0131、0131),并将其作为id 9的值插入。例如,最终结果必须如下所示:

(602, '0602', '[{"id":"9","value":"0602"},{"id":"1","value":"1"}]'),
(1644, '0164', '[{"id":"9","value":"0164"},{"id":"1","value":"3"}]'),
(1311, '0131', '[{"id":"9","value":"0131"},{"id":"1","value":"100"}]'),
(1321, '0132', '[{"id":"9","value":"0132"},{"id":"1","value":"150"}]')

我尝试在Notepad++中使用这个正则表达式进行搜索:
(, '.*)("id":"9","value":"")

替换:

($1)("id":"9","value":"$1")

结果很接近,但不是我需要的。如果您知道正确的答案,请帮助我。谢谢您提前。
1个回答

9
你可以使用以下正则表达式来捕获字符串的部分,并将其替换为第二列的值。
^(\(\d+,\s*.*?(\d+).*?value":).*?([,}])

使用 \1"\2"\3 作为替换部分。

在 RegEx101 上查看演示

解释:

  1. ^:行首
  2. \(:匹配左括号
  3. \d+,\s*:匹配数字后跟逗号和任意数量的空格
  4. .*?:匹配任何内容以满足以下条件
  5. (\d+):匹配一个或多个数字并将其添加到捕获组中
  6. .*?value"::匹配直到 value"
  7. ([,}]):匹配逗号或花括号

捕获组 \1 将包含字符串,直到 value":"\2" 将包含双引号内的第二列中的数字,\3 将包含最后的逗号或花括号。


小心,您在替换中的值后面缺少引号。 - Lery
@Tushar,非常感谢您的解决方案和解释。我会立即尝试它。 - Eduard Dimitrov
@Tushar 100%的解决方案。我稍微修改了一下,像这样:搜索:^((\d+,\s*.?(\d+).?value":").*?([,}]) 替换:\1\2"\3。再次感谢! - Eduard Dimitrov
1
太好了!现在我明白了 '(' ')' 的作用。谢谢! - Lucas Prestes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接