我是Regex的新手,所以不要评判,这是我的电子邮件正文:
INTERFACE ATM0/0/0 NOW MATCHES UD
Notification Type: INT-PHYSICAL
Host: Bla Bla
Address: xxx.xx.xxx.xx
State: UP
Date/Time: Thu Dec 11 21:07:05 GMT 2014
...
我正在使用VBA宏将电子邮件导出为CSV文件,然后我将数据导入PowerShell并尝试将body与下面的RedEx代码匹配。我只需匹配此行 - INTERFACE ATM0/0/0 NOW MATCHES UD
并将结果放入变量 - AlertName ,但问题是这条线对于每封电子邮件都不相同。此行的部分始终相同,为INTERFACE[space]
和[space]NOW[space]MATCHES[space]
。
这是我到目前为止所得到的:
If($_ -match "(?<AlertName>[INTERFACE\s\w -/\sNOW\sMATCHES\s\w \r?\n]]+?)")
或
If($_ -match "(?<AlertName>[INTERFACE\s.*\r?\n]+?)")
但它不起作用!
你能帮我吗?
提前致谢!
答案 0 :(得分:3)
不清楚你正在做什么,但是下面的内容将有助于
if($_ -match "(INTERFACE.*NOW\s+MATCHES.*)") {
$alertName = $matches[1]
}
特殊变量$matches
将包含有关匹配的信息,$matches[1]
将包含第一组捕获 - 即括号(...)
答案 1 :(得分:1)
PowerShell存储-match
哈希表中$matches[]
运算符的匹配项。
如果您需要更多功能,还可以直接使用.NET中的[Regex]
类(aka,[System.Text.RegularExpressions.Regex]
)。