Powershell-Regex-固定宽度文件-转义字符



读取这样的固定宽度文件时:

ABC       7112123207/24/16Smith                              Timpson                            Head Coach                                                            412-222-0000        00011848660    ELl CAAN HIGH SCHOOL                  325 N Peal AVE.                   Smith                         Timpson                       Head Coach                              COLORADO CITY            AZ 86021       01             FALL      MALE      07/29/16EQ15031                  1977904        BUDDY'S ALL STARS INC.                  BUDDY ALL STARS                                                                                                                             N                 V12V70R16                                1.00V12V70R16  

我希望转义单个空格和撇号。

我在Powershell中尝试了我的regex,如下所示:

 $Line | Select-String -Pattern "^(.*)[a-zA-Z0-9?s?]" -AllMatches    

我需要匹配值读取为:

ABC
12345607/24/16 Joe(分为三部分:123456,07/24/16,Joe)
史密斯
首席培训师
Buddy’s Box

我正在尝试将切片添加到csv中,将每个切片分配给一个标头。例如:

$csh.USER_GROUP = $line.Substring(0,10).Trim() 
$csh.ORDER_NUMBER = $line.Substring(10,8).Trim()        
$csh.ORDER_ENTRY_DATE=$line.Substring(18,8).Trim()
$csh.CONTACT_FIRST=$line.Substring(26,35).Trim()
$csh.CONTACT_LAST=$line.Substring(61,35).Trim()
$csh.CONTACT_TITLE=$line.Substring(96,35).Trim()
$csh.CONTACT_EMAIL= $line.Substring(131,35).Trim()
$csh.CONTACT_PHONE=$line.Substring(166,20).Trim()
$csh.SCHOOL_ID=$line.Substring(186,15).Trim() 
} | convertto-csv | select-object -skip 1 | out-file temp.csv 

现在,考虑到有空格和重复元素,不允许重复键是错误的。有优雅的替代品吗?

使用两个或多个空格作为分隔符进行匹配:

if ($Line -match '(S.*?)  +(.{6})(.{8})(.*?)  +(.*?)  +(.*?)  +(.*)') {
    $whatsit = $matches[1]
    $index = $matches[2] 
    $date = $matches[3]
    $name1 = $matches[4]
    $name2 = $matches[5]
    $position = $matches[6]
    $place = $matches[7]
} else {
    echo "Bad line $Line"
}

最新更新