【问题标题】:Splitting a string on spaces but ignore section between double quotes在空格上拆分字符串但忽略双引号之间的部分
【发布时间】:2018-10-26 08:27:42
【问题描述】:

如何拆分这个字符串:

$Arguments = '/NOGUI /DATE /EXPAND 4 /SIZEUNIT 3 /SORTTYPE 0 /EXCEL "S:\Test\Brecht\Log Test\Report 13.xlsx" /SHEETNAME "Data set" /SCANPATH "S:\My Folder"'

进入以下数组:

/NOGUI
/DATE
/EXPAND
4
/SIZEUNIT
3
/SORTTYPE
0
/EXCEL
"S:\Test\Brecht\Log Test\Report 13.xlsx"
/SHEETNAME
"Data set"
/SCANPATH
"S:\My Folder"

使用$Argument.split(' ') 时,它还会拆分双引号字符串,这是不希望的。在ScriptingGuy's blog 上,他们解释了什么是可能的。但我似乎找不到忽略双引号之间的字符串的方法。

【问题讨论】:

    标签: string powershell split


    【解决方案1】:
    $Arguments = '/NOGUI /DATE /EXPAND 4 /SIZEUNIT 3 /SORTTYPE 0 /EXCEL "S:\Test\Brecht\Log Test\Report 13.xlsx" /SHEETNAME "Data set" /SCANPATH "S:\My Folder"'
    
    $splitString = [regex]::Split( $Arguments, ' (?=(?:[^"]|"[^"]*")*$)' )
    $splitString
    

    输出:

    /NOGUI
    /DATE
    /EXPAND
    4
    /SIZEUNIT
    3
    /SORTTYPE
    0
    /EXCEL
    "S:\Test\Brecht\Log Test\Report 13.xlsx"
    /SHEETNAME
    "Data set"
    /SCANPATH
    "S:\My Folder"  
    

    【讨论】:

    • 你能解释一下那个正则表达式字符串吗?试图弄清楚它,以便我理解它的未来
    • 是否还有一个选项可以从阵列中删除双倍或更多的白人步伐?否则,完美!谢谢@Ketanbhut
    • @KarkLite1: 可能有帮助:'\s+(?=(?:[^"]|"[^"]+")+$)' .. \s+ 将检查多个白色空格。因此,如果有 2 个或更多空格(例如:3 /SORTTYPE 0 /EXCEL)。
    • @Ross Lyons:我可以这样做: 1. [regex]::Split( $anyString, ' (?=(?:[^"]|"[^"]*") *$)') 它一直捕获匹配项(单个空格)直到找到第一个双引号 (") 并开始省略捕获直到找到另一个双引号 ( ") - 并继续 - 最终跳过 2 个双引号之间的任何内容这是 .net 参考:regexhero.net/reference
    猜你喜欢
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    相关资源
    最近更新 更多