正则表达式在捕获行的其余部分时替换特定字符

regex to replace specific characters while capturing the rest of the line

使用记事本++

我需要在仅以 genre: 开头的行中将 ", " 替换为 , ,文档中没有其他内容,同时保留该行中的所有其他内容。我会将 search/replace 应用于整个文件夹,因此我需要尽可能精确。

例子

genre: "drama", "thriller", "mystery", "espionage"
genre: "drama", "sci-fi"

应该是这样的:

genre: "drama, thriller, mystery, espionage"
genre: "drama, sci-fi"

我费了好大的劲才弄清楚如何做到这一点,而不是在 ", " 的每个实例之前和之后捕获无限数量的未知组,同时还保留第一个单词和冒号: genre: 。我很确定我必须捕获第一个和最后一个 " 之间的整个组,然后用该组中的 , 替换 ", ",但我不知道如何这样做。

显然,我这里的内容无法解决问题。

find what: ^genre: "(.*)", "(.*)", "(.*)", "(.*)"
replace with: genre: ", , , "

您可以使用

Find: (?:\G(?!^)|^genre:\h*").*?\K",\h*"
Replace: ,<SPACE>

详情:

  • (?:\G(?!^)|^genre:\h*") - 前一个匹配位置的结尾或 genre:,零个或多个水平白色 spaces 和 " 在字符串的开头(这里,行)
  • .*? - 除换行字符外的任何零个或多个字符,尽可能少
  • \K - 省略匹配的文本
  • ",\h*" - 消耗 ",,然后是零个或多个水平白色 space,然后是 "(这将被替换为 , + space)

参见 regex demo:

然后试试这个代码,Updated Answer

查找:(?:^genre|\G)(?!^).*?\K", "
全部替换:, ","

后有一个 space