powershell或excel在字符串的最后两个逗号中拆分字符串

时间:2015-07-15 16:48:21

标签: regex string excel powershell split

我有一个文件共享列表(数十万行),大多数在Excel中完全对齐,我可以使用文本到列进行拆分。但是我遇到了一个问题,因为有一些文件路径在名称中有一个逗号,而是在那里拆分而不是实际所需的分隔符。以下是字符串的示例:

\\\Share\MMMC\MMMC\Employees\Jones, Pat\Payment Vouchers\The Creative Group\Amy DOE\2014\Inv. # 403412 - $671.16 - 5-16-14.xlsm,DOMAIN\YA-MGD              ,               RWXD      
\\\Share\MMMC\MMMC\Employees\Jones, Pat\Payment Vouchers\The Creative Group\Amy DOE\2014\Inv. # 403412 - $671.16 - 5-16-14.xlsm,DOMAIN\SGRP-Triple,               RWXD 

在以上两行开头的\\分享它分裂在琼斯和“,DOMAIN”,然后是最后一个逗号离开完整的共享路径。逗号的数量可以变化到4或5.我只希望它在最后两个逗号中分开。我怎么能以编程方式做到这一点? excel公式或powershell脚本将是理想的。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

PowerShell和RegEx可以做到这一点。这是解释RegEx的链接:

https://regex101.com/r/eW2rP5/2

我将使用的RegEx是^(.+?),([^,]+?),([^,]*)$。从一行的开头到第二个到最后一个逗号,跳过逗号,然后是所有非逗号字符直到最后一个逗号,再次跳过逗号,所有非逗号字符到达结尾线。每个都是它自己的捕获组,因此我们可以使用自动$Matches变量来生成PSCustomObject,其中包含每个部分的属性:

@"
\\\Share\MMMC\MMMC\Employees\Jones, Pat\Payment Vouchers\The Creative Group\Amy DOE\2014\Inv. # 403412 - $671.16 - 5-16-14.xlsm,DOMAIN\YA-MGD              ,               RWXD      
\\\Share\MMMC\MMMC\Employees\Jones, Pat\Payment Vouchers\The Creative Group\Amy DOE\2014\Inv. # 403412 - $671.16 - 5-16-14.xlsm,DOMAIN\SGRP-Triple,               RWXD 
"@ -split "`r`n"|Where{$_ -match "^(.+?),([^,]+?),([^,]*)$"}|ForEach{[PSCustomObject]@{"SharePath"=$Matches[1];"User"=$Matches[2].trim();"Rights"=$Matches[3].trim()}}

魔术是Where语句与RegEx匹配的组合,以及使用这些匹配为每行创建自定义对象的ForEach循环。你最终得到:

SharePath                                                                                                                   User               Rights
---------                                                                                                                   ----               ------
\\\Share\MMMC\MMMC\Employees\Jones, Pat\Payment Vouchers\The Creative Group\Amy DOE\2014\Inv. # 403412 - .16 - 5-16-14.xlsm DOMAIN\YA-MGD      RWXD  
\\\Share\MMMC\MMMC\Employees\Jones, Pat\Payment Vouchers\The Creative Group\Amy DOE\2014\Inv. # 403412 - .16 - 5-16-14.xlsm DOMAIN\SGRP-Triple RWXD