无法将正则表达式模式表单文件解析为 powershell 中的变量

Posted

技术标签:

【中文标题】无法将正则表达式模式表单文件解析为 powershell 中的变量【英文标题】:unable to parse regex pattern form file to the variable in powershell 【发布时间】:2021-11-05 20:05:53 【问题描述】:

我正在寻找文件夹名称是否符合以下 powershell 中的正则表达式模式。

    检查前 4 个字母是 HOST。 根据 c:\shortnameslist.csv 中的短名称检查接下来的 3 或 4 个字母。 检查最后三个字母是否为 END。

#$shortname = (Import-Csv "c:\shortnameslist.csv")

$foldername = "文件夹名称"

$regex = '\b^(HOST)($shortname)(END)\b'

$文件夹名-匹配$正则表达式

问题:

如何从正则表达式模式的 csv 列表中解析中间部分“短名称”。 谢谢。

【问题讨论】:

看来您只需要将第一列中的所有值抓取到列表/数组中,然后加入| 并使用$regex = '^HOST(?:$shortname)END$'。注意 -match 不区分大小写。使用-cmatch 进行区分大小写的匹配。 @WiktorStribiżew 您需要在正则表达式两边加上双引号,否则变量 $shortname 将不会展开 @Theo 是的,很抱歉在复制/粘贴时没有注意到。 【参考方案1】:

将 CSV 中的短名称值与正则表达式“OR”符号“|”结合起来 转义任何可能的正则表达式特殊字符

$shortname = (Import-Csv -Path 'c:\shortnameslist.csv' | ForEach-Object  [regex]::Escape($_.shortname) ) -join '|'
$regex = "^HOST($shortname).*END$"

$foldername = 'HOSTIFS-blahblahEND'  # "FOLDERABSNAME"
$foldername -match $regex  # --> True

如果返回 $true,则可以在 $matches[1] 中找到匹配的短名称

如果比较需要区分大小写,请将-match 更改为cmatch

【讨论】:

感谢您的澄清。解决方案按预期工作。

以上是关于无法将正则表达式模式表单文件解析为 powershell 中的变量的主要内容,如果未能解决你的问题,请参考以下文章

js 常用正则表达式表单验证代码

如何将 Java 字符串转换为模式正则表达式?

使用正则表达式解析日志文件

正则表达式无法解析最后一组[重复]

通过正则表达式实现简单xml文件解析

正则表达式