【问题标题】:Powershell: using -split "\s+" as opposed to .split "\s+"Powershell:使用 -split "\s+" 而不是 .split "\s+"
【发布时间】:2015-10-01 13:28:22
【问题描述】:

前奏

我正在尝试执行一项操作,该操作需要我将每个单词解析为特定文件。最直接的方法是使用以下命令加载文本:

$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+")

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

这个功能刚刚坏了吗?

这里还有其他一些我不知道的区别吗?

【问题讨论】:

    标签: regex parsing powershell-4.0


    【解决方案1】:

    Powershelladmin wiki:

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

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

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

    所以,您只是通过$content.split("\s+") 传递需要拆分的符号,而不是匹配空格的正则表达式。

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

    【讨论】:

    • 所以您是说 System.String 方法不支持正则表达式,因此,“\s+”在 ' 的上下文中并不意味着 一个或多个空格 $content.split("\s+")' 正确吗?
    • 请注意,这不仅仅是我在说的,而是您的示例不言自明:所有s 字母都被拆分了。 Synthesizer 等。您的$content.split("\s+")s+ 拆分(我猜\ 被认为是错误的转义符号并被忽略) .自己试试吧。
    • 现在你指出了这一点;我现在可以看到这正是它正在分裂的东西!我还针对 ' $content.split(" ") '进行了测试,它的工作原理完全符合预期。谢谢楼主!
    • 我刚刚遇到this post,它说所有字符串都是逐字字符串文字,所以,$content.split("\s+") 也应该用\ 分割。
    • 我刚刚测试过。确认您的上述声明@stribizhev。 “\”字符也会分割行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    相关资源
    最近更新 更多