在读取这样的固定宽度文件时:
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中尝试了我的正则表达式:
$Line | Select-String -Pattern "^(.*)[a-zA-Z0-9?\s?]" -AllMatches
我需要将匹配值读作:
ABC
12345607/24 / 16Joe(这分为三:123456,07 / 24/16,乔)
史密斯
主教练
好友的盒子
我尝试将切片添加到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
现在,假设存在空格和重复元素,则错误的是不允许重复键。有优雅的选择吗?
答案 0 :(得分:1)
使用两个或多个空格作为分隔符进行匹配:
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"
}