【问题标题】:Append string to words in snippets将字符串附加到片段中的单词
【发布时间】:2020-03-10 14:49:19
【问题描述】:

我目前正在使用 JavaScript 正则表达式为 VSCode 开发一些 Python sn-ps,我想要一个类似的:

给定

var1, var2, var3

生产

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

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

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

感谢您的帮助

编辑: 根据 cmets 中的建议,我尝试了这个:/(.*,)/self.$0 = $0/ 它显然不起作用有几个原因:它匹配所有字符串直到最后一个逗号。 VSCode 不提供对“\w”的访问权限,但我看不出它有什么帮助。 我测试的其他东西也不起作用,因为我正在寻找复制每个单词:/(.*)/self.$0 = $0/

由于我没有发布它,这里是用新行替换的 comme: /[,]/\n/g

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

toto, titi, tata

导致

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

【问题讨论】:

  • 我实际上不知道如何尝试任何事情。正如我所说,我可以用换行符替换逗号(这很容易),但我不知道从哪里开始。我想选择每个单词的开头并将其替换为“self”。以及复制每个单词并在前面附加一个“=”。但我不知道该怎么做
  • 好的,所以这根本没有帮助,因为我已经浏览了 JS 和 Python 的整个正则表达式文档。我想复制一个单词并在它之前/之后插入字符串。我读到的东西都没有回答这个问题,也没有一个想法。
  • 好的,所以一点都不清楚,因为您链接了一些东西以在行尾添加字符串。我测试了你解释的内容,但它不起作用,因为我匹配任何单词,就像你说的那样。但我想要复制每个单词:“toto,tata,titi”应该给出“toto toto,tata tata,titi titi”,它给出“toto,tata,titi toto,tata,titi”
  • 尝试以下操作:/(.*?)(?:, |$)/self.$0 = $0\n/
  • 我想我们在这里有些东西,谢谢@HarmvanderWal。可悲的是,它并不完全有效。我会更新问题

标签: regex visual-studio-code vscode-debugger


【解决方案1】:

将以下内容添加到您的python.json sn-p 文件中

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

结果

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

光标在下一行。

编辑

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

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

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

【讨论】:

  • 看起来很眼熟...我建议` "${1/\\s*([^,]+)(,)*/self.$1 = $1${2:+\n }/g}",` 因为正则表达式稍微简单一些,并且它不会在最后一个变量之后添加额外的换行符。并且空间处理得更好。我用你的代码在后续行的开头添加了空格。
  • 也很容易将其修改为已列出和选择变量的位置。如果这是 OP 的用例。有关在类构造函数 sn-p 中使用可变数量参数的更复杂情况,请参阅stackoverflow.com/questions/53998252/…,对于类初始值设定项,请参阅stackoverflow.com/questions/58225204/…
【解决方案2】:

你可以使用

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

请参阅regex demo

详情

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

【讨论】:

    猜你喜欢
    • 2015-09-21
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    相关资源
    最近更新 更多