Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 捕获CSV中的特定字符串_Powershell_Csv - Fatal编程技术网

Powershell 捕获CSV中的特定字符串

Powershell 捕获CSV中的特定字符串,powershell,csv,Powershell,Csv,我试图在CSV字段中捕获特定的字母和数字序列。 该字段可以包含以下内容: 一些随机文本WMM540

我试图在CSV字段中捕获特定的字母和数字序列。 该字段可以包含以下内容:

一些随机文本WMM540<单元格文本

编辑:以下是原始csv:

员工ID、姓名、姓氏、基本门店代码、职务 555555,马克,测试流程,莫纽卡斯尔莱姆WMM222,跟单员 55555 6,Carly,O'Test,AS Congleton ASD1111,主管 我需要捕获WMMXXX,其中X是变量中的数字,但可能会有更多代码。我需要获得的可能代码有:

WMMXXX MORXXX ASDXXXX由3位改为4位 威尔克斯 PLDXXX SUPXXX 。。还有一些

我知道你可以使用正则表达式分割和隔离文本,但我没有足够的经验。 最后,我需要一个如下的变量:$v='WMMXXX'

请你帮忙好吗

非常感谢

注意:

听起来您最终需要一个正则表达式来提取感兴趣的子字符串,如中所示

这个答案显示了一种简化的方法,其假设是感兴趣的子字符串始终是感兴趣列中最后一个空格分隔的标记

使用,提取感兴趣的列值列基存储代码,并从每个中提取最后一个以空格分隔的标记,使用-split的一元形式,可以执行索引[-1]返回结果数组的最后一个元素:

Import-Csv in.csv | ForEach-Object { (-split $_.'Base Store Code')[-1] }
使用示例数据作为输入,这将产生:

WMM222
ASD1111
注:

听起来您最终需要一个正则表达式来提取感兴趣的子字符串,如中所示

这个答案显示了一种简化的方法,其假设是感兴趣的子字符串始终是感兴趣列中最后一个空格分隔的标记

使用,提取感兴趣的列值列基存储代码,并从每个中提取最后一个以空格分隔的标记,使用-split的一元形式,可以执行索引[-1]返回结果数组的最后一个元素:

Import-Csv in.csv | ForEach-Object { (-split $_.'Base Store Code')[-1] }
使用示例数据作为输入,这将产生:

WMM222
ASD1111

把我的评论变成答案

因为您显然只想找到非常具体的代码,所以您可以这样做:

$regex = '((?:WMM|MOR|WIL|PLD|SUP)\d{3}|ASD\d{4})'
Import-Csv -Path 'PathToTheFile.csv' | ForEach-Object {
     if ($_.'Base Store Code' -match $regex) { $matches[1] }
}

把我的评论变成答案

因为您显然只想找到非常具体的代码,所以您可以这样做:

$regex = '((?:WMM|MOR|WIL|PLD|SUP)\d{3}|ASD\d{4})'
Import-Csv -Path 'PathToTheFile.csv' | ForEach-Object {
     if ($_.'Base Store Code' -match $regex) { $matches[1] }
}

类似$v=if$cellValue-match'?:WMM | MOR | WIL | PLD | SUP\d{3}| ASD\d{4}{$matches[1]}应该可以工作,但是我们确实需要更多的细节……如果它总是最后一个空格分隔的令牌,不管它的内容是什么:$v=$cellValue-replace'^.'。这只是从输入字符串中剥离所有内容,包括最后一个空格。类似$v=if$cellValue-match'?:WMM | MOR | WIL | PLD | SUP\d{3}| ASD\d{4}{$matches[1]}应该可以工作,但我们确实需要更多细节……如果它始终是最后一个空格分隔的标记,无论其内容如何:$v=$cellValue-replace'^.*。这只是从输入字符串中删除所有内容,包括最后一个空格。向上投票,接受,非常感谢,谢谢!向上投票,接受,非常感谢,谢谢!