将字符串附加到片段中的单词

Append string to words in snippets

我目前正在使用 JavaScript 正则表达式为 VSCode 编写一些 Python 片段,我想要这样的片段:

给定

var1, var2, var3

生产

self.var1 = var1
self.var2 = var2
self.var3 = var3

我目前知道如何用换行替换逗号,但不知道如何用另一个字符串替换每个单词。我很不擅长正则表达式,所以它没有帮助。我想我需要执行以下操作的东西:

var1, var2 -> self.var1 = var1, self.var2 = var2

感谢您的帮助

编辑: 根据评论中的建议,我尝试了这个:/(.*,)/self.[=15=] = [=15=]/ 由于几个原因,它显然不起作用:它匹配所有字符串直到最后一个逗号。 VSCode 不允许访问“\w”,但我看不出它有什么帮助。 我测试过的其他东西也不起作用,因为我正在寻找重复的每个单词:/(.*)/self.[=16=] = [=16=]/

因为我没有 post 它,这里是用新行替换的 comme : /[,]/\n/g

Edit2(更新): 根据我尝试的评论建议:/(.*?)(?:, |$)/self. = \n/g 导致几乎完美的结果:

toto, titi, tata

导致

self.toto = toto
self.titi = titi
self.tata = tata
self. = 

您可以使用

查找内容\s*([^,\s]+)(?:,|$)
替换为self. = \n

参见regex demo

详情

  • \s* - 0 个或更多空格
  • ([^,\s]+) - 捕获第 1 组:除空格和逗号之外的一个或多个字符
  • (?:,|$) - 非捕获组匹配 , 或行尾。

将以下内容添加到您的 python.json 代码段文件

  "var-init": {
    "prefix": "varinit",
    "body": [
      "${1/([\w_]+)(?:[,\s]|$)/self. = \n/g}",
      "[=10=]"
    ],
    "description": "var initialisation"
  }
  • 键入前缀:varinit
  • Tab
  • 键入您想要的变量,用 , 分隔(带或不带空格):titi,tata,toto
  • Tab

结果

self.titi = titi
self.tata = tata
self.toto = toto

并且光标在下一行。

编辑

正则表达式的简化并使用 Mark 关于 if 替换的提示 ${2:+\n}

"${1/([\w_]+)([, ])*/self. = ${2:+\n}/g}"

现在变量可以用空格分隔或,