【问题标题】:Splitting a string into separate variables将字符串拆分为单独的变量
【发布时间】:2015-08-17 12:36:14
【问题描述】:

我有一个字符串,我使用代码$CreateDT.Split(" ") 对其进行了拆分。我现在想以不同的方式操作两个单独的字符串。如何将它们分成两个变量?

【问题讨论】:

标签: string powershell


【解决方案1】:

像这样?

$string = 'FirstPart SecondPart'
$a,$b = $string.split(' ')
$a
$b

【讨论】:

  • 如果你有"FirstPart SecondPart ThirdPart"并且只想要两个,你可以使用$a,$b = $string.split(' ')[0,1]
  • 如果你有 $string = 'FirstPart - SecondPart' 和 $a,$b = $string.split('-'),添加 ..Trim() ($a,$b = $ string.split('-').Trim()),然后$a和$b都被修剪
【解决方案2】:

使用-split 运算符创建一个数组。像这样,

$myString="Four score and seven years ago"
$arr = $myString -split ' '
$arr # Print output
Four
score
and
seven
years
ago

当你需要某个项目时,使用数组索引来到达它。请注意,索引从零开始。像这样,

$arr[2] # 3rd element
and
$arr[4] # 5th element
years

【讨论】:

  • 或等效:$arr = @($myString.split(' '))
  • 也可以单行:$first_word = ("one-two-three" -split '-')[0]
  • @sxc731:.Split() 总是返回一个数组,因此不需要@(...):$arr = $myString.split(' '),但请注意,更符合 PowerShell 惯用的解决方案 $arr = $myString -split ' ' 已经是答案。但是请注意,-split 采用 regex 并且不区分大小写(使用 -csplit 进行区分大小写的拆分)。
【解决方案3】:

请务必注意这两种技术之间的以下区别:

$Str="This is the<BR />source string<BR />ALL RIGHT"
$Str.Split("<BR />")
This
is
the
(multiple blank lines)
source
string
(multiple blank lines)
ALL
IGHT
$Str -Split("<BR />")
This is the
source string
ALL RIGHT 

由此可以看出string.split()方法

  • 执行区分大小写拆分(注意“ALL RIGHT”他在“R”上的拆分​​,但“broken”并未在“r”上拆分)
  • 将字符串视为可能要拆分的字符列表

-split 运营商

  • 执行不区分大小写的比较
  • 只分割整个字符串

【讨论】:

  • 这些是需要指出的很好的区别;另一个重要的一点是 -splitregex(正则表达式)作为其(第一个)RHS 操作数,而 [string] 类型的 .Split() 方法对 literal 字符 / 字符数组 / 和 - 在 .NET Core 中 - 也是文字 string。另外,请注意 PowerShell 中的正确语法是 $Str -split '&lt;BR /&gt;';虽然伪方法语法$Str -Split("&lt;BR /&gt;")碰巧在这种情况下有效,但应该避免。
【解决方案4】:

试试这个:

$Object = 'FirstPart SecondPart' | ConvertFrom-String -PropertyNames Val1, Val2
$Object.Val1
$Object.Val2

【讨论】:

  • ConvertFrom-String 是更好的解决方案。应该注意的是,ConvertFrom-String 实际上是为拆分和客观化信息字符串而设计的,这正是 OP 所希望的。还应该注意的是,虽然拆分命令行开关有效,但它需要额外的操作才能获得 OP 所需的内容,这是 ConvertFrom-String 负责的。
  • @danstermeister:通常,使用 cmdlet 进行简单的字符串拆分效率低下。具体来说,ConvertFrom-String 已经过时,应该避免使用(它总是给人一种实验性的感觉,而且它还没有包含在 PowerShell Core 中的事实表明它不会继续存在)。至于是否需要额外操作:解构赋值即可:$val1, $val2 = 'FirstPart SecondPart' -split ' '
  • 默认情况下你可以这样做:$Object = 'FirstPart SecondPart' | ConvertFrom-Csv -d ' ' -H Val1, Val2 (同 Core 6) ;)
  • @mklement0 - 由于后端工作的必要性,PowerShell 开发人员迄今尚未导入所有以 Windows 为中心的项目,但在实现实际功能奇偶性方面正在放慢速度。因此,除非它在 ​​windows powershell 中被特别弃用,否则我不一定会把它排除在外。例如,我相信 netadapter 命令会在不久的将来被移植,但现在不存在。它目前在 Core 中的存在绝对不能预测它在未来在 Core 中的存在。并且 cmdlet 效率问题最好留给实际的开发人员,而不是临时脚本编写者。
  • @danstermeister:的确,在没有进一步信息的情况下,你不能推断它不会从当前缺席中被移植 - 只是它不是一个 优先级。然而,这是一个有争议的问题,因为ConvertFrom-String 的所有固有 问题都足以避免它。这尤其适用于基于模板的解析,但即使是基于分隔符的解析也存在缺陷,因为 类型推断 总是 应用 - 请参阅stackoverflow.com/a/50166580/45375。跨度>
【解决方案5】:

foreach-object 操作语句:

$a,$b = 'hi.there' | foreach split .
$a,$b

hi
there

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多