gpt4 book ai didi

vba - 需要调整使用正则表达式从作业输出中提取 IP 地址的 Excel 函数

转载 作者:行者123 更新时间:2023-12-04 20:14:29 24 4
gpt4 key购买 nike

我有一个这样的工作输出......

Node number 1 (172.xxx.123.210):
ERROR: Cannot download Running config: Connection Refused by 172.xxx.123.210
Node number 2 (172.xxx.124.162):
ERROR: Cannot download Running config: Connection Refused by 172.xxx.124.162

我想处理那些在工作失败的括号中的 IP 地址。我拼凑了一个包含正则表达式来提取 IP 的 VB 函数,它工作得很好。问题是,正则表达式 ^.*\((\d.*)\)正在寻找括号内的字符序列,例如...
Node number 1 (172.123.123.210):

当我在不包含括号的行上调用该函数时,它只返回一个零。我没有声望点来允许我发布图片,因此如果您想查看输出,可以快速尝试!

如果括号中没有 IP,我不想返回零,我宁愿它只是让单元格为空。关于如何调整我的功能来做到这一点的任何建议?

这是我正在使用的功能...
Function getIP(info As String)

Dim allMatches As Object
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")

RE.Pattern = "^.*\((\d.*)\)"
RE.Global = True
RE.IgnoreCase = True

Set allMatches = RE.Execute(info)

If (allMatches.Count <> 0) Then
result = allMatches.Item(0).SubMatches.Item(0)

End If

getIP = result
End Function

最佳答案

我发现使用两种正则表达式模式可以识别带或不带括号的 IP 地址:

Private Sub CommandButton1_Click()

Set regEx = CreateObject("vbscript.regexp")
Set regEx2 = CreateObject("vbscript.regexp")

regEx.Global = True
regEx.IgnoreCase = True
regEx.Pattern = "\(([0-9]{3}).([0-9]{3}).([0-9]{3}).([0-9]{3})\)"
regEx2.Global = True
regEx2.IgnoreCase = True
regEx2.Pattern = "([0-9]{3}).([0-9]{3}).([0-9]{3}).([0-9]{3})"

For i = 1 To UsedRange.Rows.Count
Set allMatches = regEx.Execute(Cells(i, 1).Value)
Set otherMatches = regEx2.Execute(Cells(i, 1).Value)
If allMatches.Count <> 0 Then
Cells(i, 1).Interior.ColorIndex = 33
End If
If otherMatches.Count <> 0 Then
Cells(i, 1).Interior.ColorIndex = 33
End If
Next i

End Sub

这将遍历第 1 列,我在其中写了一些 IP 地址,并突出显示所有有效的 IP 地址(带或不带括号),并将所有非 IP 地址留空。

我发现当使用 OR 包含正则表达式的两个版本时它不起作用,我不确定为什么,也许与取消括号有关?

希望您觉得这个有帮助。

关于vba - 需要调整使用正则表达式从作业输出中提取 IP 地址的 Excel 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30936268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com