【问题标题】:VSCode Regex SnippetVSCode 正则表达式片段
【发布时间】:2018-06-05 11:51:25
【问题描述】:

我正在尝试编写 VSCode sn-p 以使用本地 Windows 存储库路径作为基础来填充远程存储库路径,但在语法上有些吃力,有人可以帮忙吗?

"MetaData Snippet": {
    "prefix": "META",
    "body": [
      "<#",
      "    .SYNOPSIS",
      "        ${1:Enter general synopsis of the type of script}",
      "",
      "    .DESCRIPTION",
      "        ${2:Short description of what the script will do}",
      "",
      "    .PARAMETER ${3:ParameterNameHere}",
      "        ${4:Description of the parameter}",
      "",
      "    .EXAMPLE",
      "        ${5:Example of how to use the code and also expected output}",
      "",
      "    .NOTES",
      "        VSTS:   ${7:$TM_FILEPATH/(.)(:\\)(.*)(\\TSO NH)//g}",
      "",
      "        | Author            | QC                | VSTS Story ID     | Release Date  |",
      "        -----------------------------------------------------------------------------",
      "        | ${8:Author Name}  | ${9:Name of reviewer} | ${10:Story Number} | $CURRENT_DATE/$CURRENT_MONTH/$CURRENT_YEAR_SHORT      |",
      "#>"
    ],
    "description": "MetaData Snippet"
  }

示例路径:c:\Users\USERNAME\git\Cloud and Automation\.vscode\test.ps1

基本上我想去掉c:\Users\USERNAME\git\,剩下的我想用/替换\字符。

我知道我的语法是错误的,但我不确定我对正则表达式的理解是否足够好并且无法弄清楚:(

总结一下我想转:

c:\Users\USERNAME\git\Cloud and Automation\.vscode\test.ps1 

进入:

Cloud and Automation/.vscode/test.ps1 

【问题讨论】:

  • 如果您需要正则表达式方面的特别帮助,只需输入您开始使用的示例行,以及您希望将其转换为的内容。您只是想在字符串中将 \ 替换为 / 吗?
  • 这就是我想要的... 当前:c:\Users\USERNAME\git\Cloud and Automation\.vscode\test.ps1 结果:Cloud and Automation/.vscode/test .ps1
  • 看起来不错。我不知道 VS,但可以在 python 中快速创建一个 4 行解决方案,但我怀疑有 VS 技能的人很快就会回答这个问题。如果没有,请发表评论,我可以输入我的 python 答案,你可以看到正则表达式是如何工作的。
  • 是的,我认为这会有所帮助,至少这样我可以理解逻辑并且可以从那里弄清楚。这是我使用正则表达式的地方: (^.*Cloud)|(\) 这似乎匹配 2 个组(Group1: 'file path' & Group2: '\'),我只是失败了变换。
  • 酷,我会回答的

标签: regex visual-studio-code code-snippets


【解决方案1】:

试试这个:

"${TM_DIRECTORY/.*\\\\(.*)\\\\(.*)$/$1\\/$2/}/${TM_FILENAME}"

并查看escaping in vscode snippets。您确实有一个. 用于.vscode,因此您可能还需要适应它 - 只需在第二个捕获组(\..*) 或更多反斜杠中添加一个转义句点,但您可能根本不需要它.

【讨论】:

  • 这非常接近!我发现的唯一问题是它看起来像是在为一对反斜杠之间的每组字符创建一个捕获组,并且转换将其放回没有斜杠。在您导航到不同的文件夹路径深度并使用它之前,这非常有效。你知道捕获“Beginning git\”然后删除,捕获剩余的'\'并替换为'/'的方法吗?我可能完全误解了正则表达式
  • 它从 TM_DIRECTORY 中获取最后两个目录,每个目录在各自的捕获组中,这样路径分隔符就不能被捕获而是用 / 替换,然后将文件名添加到末尾。我以为这就是你想要的?我不明白你在评论中的问题:“Beginning....git\?
【解决方案2】:

虽然这是在 python 而不是 VS 中,但您可以看到正则表达式的作用。根据 OP 在 cmets 中的请求,这里是 python 中的示例。

import re

data = r"c:\Users\USERNAME\git\Cloud and Automation\.vscode\test.ps1"
path = re.sub(r".*git\\", "", data)   #strip up to git
fixed_path = re.sub(r"\\", "/", path) #replace backslashes with slashes
print(fixed_path)

请注意,我正在转义 \,这可能是您遇到的问题的一部分。我选择剥离字符串而不是尝试捕获它的一部分,有时这样更容易:)

输出:

Cloud and Automation/.vscode/test.ps1

【讨论】:

    猜你喜欢
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    相关资源
    最近更新 更多