Powershell:使用-split“\ s +”而不是.split“\ s +”

时间:2015-10-01 13:28:23

标签: regex parsing powershell-v4.0

前奏

我正在尝试执行一项操作,该操作要求我解析特定文件的每个单词。最直接的方法是使用:

加载文本
$content = Get-Content -Path .\<filename>

然后我会将每个单词分成单独的一行(这使我可以非常快速地进行单词计数和单字搜索)。问题是当我使用这行代码时:

$content.split("\s+")

应该在每个(一个或多个)空白字符上创建一个新行(拆分)。不幸的是,我的结果看起来像这样:

$content.split("\s+")
The SpeechSynthe
izer cla

provide
acce

 to the functionality of a 
peech 
ynthe
 i
  engine that i
  in
talled on the ho
t computer. In
talled 
peech 
ynthe
 i
 engine

但是当我跑步时

$content -split("\s+")

结果将正确显示:

$content -split("\s+")
The
SpeechSynthesizer
class
provides
access
to
the
functionality
of
a
speech
synthesis

我的问题 使用PowerShell V.4我无法理解执行操作之间的区别。

$ content.split( “\ S +”)

$content -split("\s+")

是。为什么他们输出不同的结果。

这项功能刚刚破裂吗?

在这里我还有其他不同之处吗?

1 个答案:

答案 0 :(得分:2)

请参阅Powershelladmin wiki

  

-split运算符采用正则表达式,并且要分割任意数量的空格,您可以使用正则表达式"\s+"

  

要拆分单个或多个字符,您还可以使用System.String对象方法Split()

     

PS C:\> 'a,b;c,d'.Split(',') -join ' | '
  a | b;c | d
  PS C:\> 'a,b;c,d'.Split(',;') -join ' | '
  a | b | c | d

所以,你刚刚传递了需要用$content.split("\s+")分割的符号,而不是正则表达式来匹配空格。

$content -split("\s+")中,\s+是一个正则表达式模式,匹配 1个或多个空格符号