vba - 在 VBA 中使用 RegEx 查找评级
问题描述
我承认我在 RegEx 方面很糟糕,而且我正在为这个 VBA 片段而苦苦挣扎。我正在尝试在评估等级(未达到、最低、达到、超过、杰出)旁边查找“x”,表明一个人获得了哪个等级。然后我需要在一个变量中捕获该评级。
我的输入文本如下所示:
/Not Met /Minimal /Met xExceed /Outstanding
此人获得了“超过”评级,因为他们前面有一个“x”。我有很多这些要解析,“x”可以在任何评级前面。
我正在查看较早的 RegEx 帖子以寻求帮助:
我正在尝试做一个像下面这样的模式,但这还不是很接近。我不知道如何查找“x”,确保它旁边的字母是大写的,然后捕获“x”之后和空格之前的所有文本。
Dim strPattern As String: strPattern = "[x]{1}[A-Z]{1}"
有什么建议,还是有更简单的非 RegEx 方法来做到这一点?
解决方案
这是一些 VBA 代码来完成您需要的一些测试用例:
Option Explicit
Private Sub Command1_Click()
MsgBox GetRating("xNot Met /Minimal /Met /Exceed /Outstanding ")
MsgBox GetRating("/Not Met /Minimal /Met xExceed /Outstanding ")
MsgBox GetRating("/Not Met /Minimal /Met /Exceed xOutstanding ")
MsgBox GetRating("/Not Met /Minimal /Met /Exceed /Outstanding ")
End Sub
Private Function GetRating(ByVal Evaluation As String) As String
Dim i As Long, j As Long
GetRating = "<na>"
Do
i = InStr(i + 1, Evaluation, "x")
If i > 0 And Mid(Evaluation, i + 1, 1) = UCase(Mid(Evaluation, i + 1, 1)) Then
j = InStr(i, Evaluation, " ")
If j > 0 Then
GetRating = Mid(Evaluation, i + 1, j - i - 1)
Exit Function
End If
End If
Loop Until i = 0
End Function
有几点需要强调:
我将评级从“x”增加到 2 个空格,否则将无法正确返回“Not Met”。
为了简化编码,我在评估的末尾附加了 2 个空格。