您可以使用此:
$aptReg=[regex]'^(.*)(Apt.*)$'
"839 Main St Apt 3","130 Marcy Ave","399 Broadway Ave Apt 6F" | % {if($aptReg.IsMatch($_)){$a=$aptReg.Matches($_);[PSCustomObject]@{"A1"=$a.Groups[1].Value;"A2"=$a.Groups[2].Value}}else{[PSCustomObject]@{"A1"=$_;"A2"=""}}}
它提供:
A1 A2
-- --
839 Main St Apt 3
130 Marcy Ave
399 Broadway Ave Apt 6F
鉴于以下CSV文件:
"Name","Surname","Address","Zipcode"
"N1","S1","839 Main St Apt 3","Z1"
"N2","S2","130 Marcy Ave","Z2"
"N2","S2","399 Broadway Ave Apt 6F","Z2"
很长的一个衬垫...
Import-Csv C:\ Temp \ test.csv | %{if($ aptReg.IsMatch($ .Address)){$ a = $ aptReg.Matches($ .address); $ a1 = $ a.Groups [1] .Value; $ a2 = $ a.Groups [2] .Value} else {$ a1 = $ .address; $ a2 =“”}; Add-Member -InputObject $ -MemberType NoteProperty -Name“A1”-Value $ a1; Add-Member -InputObject $ _ -MemberType NoteProperty - 名称“A2” - 值$ a2; $ _} | Export-Csv“C:\ Temp \ test Bis.csv”
脏数据总是一个问题。如果总是使用'Apt'缩写,那么你可以分开。 – EBGreen
这就是我的想法。有没有办法根据这个词分割它,并保持它?我正在考虑附加丢失的字母,如果我使用拆分功能,但不是每行都有APT。在Excel中,我会使用搜索和替换附加〜APT的infront,然后使用文本到列并使用〜作为分隔符。我不知道如何通过PowerShell去做这件事。 – User125
是的,您需要拆分单词(包括它周围的空格)并将Apt添加回拆分后的第二个位。你也需要使用一些逻辑来处理没有它的行。 – EBGreen