使用powershell拆分字符串以获取第一个和最后一个元素

Eli*_*eth 8 powershell powershell-4.0

如果你这样做:git describe --long

你得到: 0.3.1-15-g3b885c5

这就是上面字符串的含义:

Tag-CommitDistance-CommitId(http://git-scm.com/docs/git-describe)

如何拆分字符串以获取第一个(Tag)和最后一个(CommitId)元素?

Oca*_*tal 15

通过使用String.split()count参数来管理commitid中的破折号:

$x = "0.3.1-15-g3b885c5"
$tag = $x.split("-",3)[0]
$commitid = $x.split("-",3)[-1]
Run Code Online (Sandbox Code Playgroud)

  • @Richard 你是对的,我只是想展示使用 `-1` 来获取最后一个索引。 (3认同)
  • 可以在单个表达式中完成的FYI:`$ a,$ b ="0.3.1-15-g3b885c5".split(' - ')[0,2]` (2认同)
  • 使用`split()`这里与正则表达式没什么不对.我喜欢正则表达式,但有时候一个不那么"复杂"的解决方案更适合未来的可读性和维护 - 原作者可以很好地理解正则表达式,但下一个对脚本的支持可能不会.对于更复杂的文本解析和处理,我选择正则表达式 - 但对于这样的简单拆分,我坚持使用`split()` (2认同)

mkl*_*nt0 10

注意:这个答案着眼于提高在分割成的令牌逐-办法理查德的有用的答案,但请注意,这种做法是不完全健壮,因为git变量名称中本身包含-的字符,所以不能盲目地认为第一-实例结束标记名称。
为了解决这个问题,请改用Richard 的强大解决方案


只是为了提供一个更符合 PowerShell 习惯的变体:

# Stores '0.3.1' in $tag, and 'g3b885c5' in $commitId
$tag, $commitId = ('0.3.1-15-g3b885c5' -split '-')[0, -1]
Run Code Online (Sandbox Code Playgroud)
  • PowerShell 的-split 操作符用于通过分隔符将输入字符串拆分为一组标记。-
    虽然[string]类型的.Split() 方法在这里就足够了,-split但总的来说提供了许多优点

  • [0, -1]从 返回的数组中提取第一个 ( 0) 和最后一个 ( -1) 元素-split,并将它们作为 2 元素数组返回。

  • $tag, $commitId = 是一个解构多重赋值,将生成的 2 元素数组的每个元素分配给一个变量。