我正在使用一个子串,它会在第二个'之前给我一切。'我之前使用过子串来获得第一个'。'之前的所有内容。
$id = $file.Substring(0, $File.LastIndexof('.'))
它完美无缺。对于第二个子串,这是我到目前为止的
$netVerShort = $netVer.Substring(0, 2nd ('.'))
但我确定这不对。我从$ netVer获得的值是2.0.5727,而第二个子串我试图让它返回2.0
答案 0 :(得分:10)
不一定是最有效的方法,但您可以使用split进行此操作并重新加入您正在寻找的元素。请使用以下字符串:
$stuff = "This.is the end. Bagels. are. awesome."
现在我们在句点上拆分它,然后取前两个元素并将它们连接在一起。
PS C:\Users\mcameron> $stuff.Split(".",3)
This
is the end
Bagels. are. awesome.
3就是说我们只需要返回3个元素。根据你有多少个时期,这可能是一个好主意,不浪费时间。接下来我们需要加入你想要的2个元素。
PS C:\Users\mcameron> ($stuff.Split(".",3) | Select -Index 0,1) -join "."
This.is the end
要解决您的.SubString()
方法,您需要检查两次,因为您将拥有第一个,然后您需要找到第二个。
PS C:\Users\mcameron> $stuff.Substring($stuff.IndexOf(".",$stuff.IndexOf(".") + 1))
. Bagels. are. awesome.
使用$stuff.IndexOf(".")
获取第一个索引,然后在返回时添加1。使用该值作为搜索下一个句点的起始索引。然后将其用于子字符串。如果您不希望句点成为返回的一部分,请在整个事物中添加1。
答案 1 :(得分:5)
如果您正在使用版本号,可以为您解析的System.Version
类:
$netVer = "2.0.5727"
$v = [version]$netVer
$netVerShort = "$($v.Major).$($v.Minor)"
将产生“2.0”
答案 2 :(得分:3)
所以,这是第一个'.'
:
$x.IndexOf('.')
这是第一个'.'
之后的所有内容:
$x.Substring($x.IndexOf('.') + 1)
这是第一个'.'
之后的第一个'.'
(所以,第二个时期):
$x.Substring($x.IndexOf('.') + 1).IndexOf('.')
所以,我们想要的字符串长度是:
$x.IndexOf('.') + 1 + $x.Substring($x.IndexOf('.') + 1).IndexOf('.')
所以,我们希望字符串从头开始,其长度足够长,可以在第二个句号之前到达:
$x.Substring(0, $x.IndexOf('.') + 1 + $x.Substring($x.IndexOf('.') + 1).IndexOf('.'))
所以:
PS C:\> $x = '198.51.100.5';
PS C:\> $x.Substring(0, $x.IndexOf('.') + 1 + $x.Substring($x.IndexOf('.') + 1).IndexOf('.'))
198.51
答案 3 :(得分:1)
你的问题不清楚。你需要包括第二期吗?你想要第二期之前的所有东西,还是第一期和第二期之间的所有东西?
"th1 s.!s.a.test" -replace '^(.+?\..+?)\..*', '$1'
th1 s.!s
如果你需要分开它们,你可以试试这个:
"th1 s.!s.a.test" -replace '^(.+?)\.(.+?)\..*', '$1'
th1 s
"th1 s.!s.a.test" -replace '^(.+?)\.(.+?)\..*', '$2'
!s
如果您只需要主要版本和次要版本,请尝试:
"2.0.5727" -replace '^(\d+\.\d+).*', '$1'
2.0
就我个人而言,我会在你的另一个问题中使用mjolinor suggested的正确.Net解决方案(这有点重复)。
答案 4 :(得分:0)
这是Matt上面回答的变体,但是使用了稍微不同的语义。我们再一次拆分并加入字符串:
("this.is the end.bagels.are good.oh yes" -split "\.")[0..1] -join "."
在此,我们已将Matt使用的select -index
替换为数组范围[0..1]
,并使用原生的-split
和-join
运算符。它比Matt的效率更高吗?在按键方面,它是:-)但计算上可能没有太多(如果有的话)差异。