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

时间:2015-08-19 12:34:33

标签: powershell powershell-v4.0

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

你得到:0.3.1-15-g3b885c5

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

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

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

3 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:4)

注意:此答案的重点是改进Ocaso Protal's helpful answer通过-划分令牌的方法
但是,该方法并不完全可靠,因为git标签名称本身可能包含-个字符,因此您不能盲目地认为第一个-实例结束完整的标签名称。
为了解决这个问题,请改用Richard's robust solution


仅提供一个PowerShell惯用的变体:

$tag, $commitId = ('0.3.1-15-g3b885c5' -split '-')[0, -1]
  • PowerShell的-split operator用于通过分隔符-将输入字符串拆分为令牌数组。
    尽管[string]类型的.Split() 方法在这里就足够了,-split offers many advantages in general

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

  • $tag, $commitId =是一种解构赋值,它将所得的2元素数组的元素分别分配给变量。

答案 2 :(得分:2)

我不记得标签中是否允许使用破折号,所以我会假设它们是,但不会出现在最后两个字段中。

因此:

if ("0.3.1-15-g3b885c5" -match '(.*)-\d+-([^-]+)') {
  $tag = $Matches[1];
  $commitId = $Matches[2]
}