我试图在CSV字段中捕获特定的字母和数字序列。该字段可以包含以下内容:
一些随机文本WMM540"& lt;单元格文本
编辑:这是原始的csv:
Employee ID,First Name,Surname,Base Store Code,Job Title
555555,Mark,Testing-Process,Mo Newcastle Under Lyme WMM222,Merchandiser
555556,Carly,O'Test,AS Congleton ASD1111,Supervisor
我需要在变量中捕获WMMXXX
(其中X
是数字),但可以有更多代码。我需要得到的可能的代码是:
WMMXXX
MORXXX
ASDXXXX (4 digits instead of 3)
WILXXX
PLDXXX
SUPXXX
. .还有更多。
我知道你可以使用正则表达式拆分和隔离文本,但我没有足够的经验。
最后我需要一个变量,看起来像:$v = 'WMMXXX'
请你帮忙好吗?
多谢
把我的评论变成答案
因为你显然只想找到非常具体的代码,你可以这样做:
$regex = '((?:WMM|MOR|WIL|PLD|SUP)d{3}|ASDd{4})'
Import-Csv -Path 'PathToTheFile.csv' | ForEach-Object {
if ($_.'Base Store Code' -match $regex) { $matches[1] }
}
备注:
-
听起来您最终需要一个正则表达式来提取感兴趣的子字符串,如Theo的有用答案所示。
-
这个答案显示了一种简化的方法,该方法基于以下假设:感兴趣的子字符串总是感兴趣列中最后一个以空格分隔的令牌。
使用Import-Csv
,提取感兴趣的列值(列Base Store Code
),并从每个列中提取最后一个空格分隔的令牌,这是-split
的一元形式,字符串分割运算符允许您做的(索引[-1]
返回结果数组的最后一个元素):
Import-Csv in.csv | ForEach-Object { (-split $_.'Base Store Code')[-1] }
以您的样例数据作为输入,这将产生:
WMM222
ASD1111