gpt4 book ai didi

arrays - 不区分大小写的正则表达式 - VBA

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

背景:

刚才在回答一个问题,正在玩RegExVBA 内.目标是创建一个字符串中存在的名称列表。 RegEx是首选解决方案,因为我们想阻止 VBA偶然发现看起来相似的标点符号和子字符串,例如:JackJacky .

样本数据:

让我举一个简单的例子。想象一下,我们有一个像这样的字符串:

Dim str As String: str = "Jack's turn, Becky's or Frank?"

我们想知道字符串中提到了某个数组中的哪些名称,例如:
Dim arr As Variant: arr = Array("Jack", "Frank")

示例代码:

为了防止对数组进行迭代,我使用了以下代码:
Sub Test()

Dim str As String: str = "Jack's turn, Becky's or Frank?"
Dim arr As Variant: arr = Array("Jack", "Frank", "Beth")
Dim regex As Object: Set regex = CreateObject("VBScript.RegExp")

regex.Pattern = "\b(" & Join(arr, "|") & ")\b"
regex.Global = True

Set hits = regex.Execute(str)
For Each hit In hits
Debug.Print hit
Next hit

End Sub

问题:

虽然上面会巧妙地返回两个命中,但它不会不区分大小写。例如,更改以下行将仅返回 Jack :
Dim str As String: str = "Jack's turn, Becky's or frank?"

我想我可以通过使用 (?i) 关闭区分大小写来解决这个问题。 :
regex.Pattern = "(?i)\b(" & Join(arr, "|") & ")\b"

但问题是这对大多数语言( test here )都适用,但是 VBA似乎有问题并生成 Error 5017执行时。

问题:

有人知道为什么吗? VBA 中不支持此功能吗?还是我的语法错误?如果不支持,在保留 Join 的可能性的同时获得不区分大小写的命中的替代方法是什么?名称数组?

奖金问题:

最终我想 Join Hits通过分隔符一起,例如:
Debug.Print Join(regex.Execute(str),", ")

但是,我意识到执行会返回一个集合,并且首先需要迭代,这是我想避免的。

最佳答案

在 RegExp 对象上设置属性,即

regex.ignorecase = True
RegExp object

The RegExp object has three properties that affect how regularexpressions are applied:

IgnoreCase: I trust this is self-explanatory

Global: Determineswhether or not to find all possible matches in the input string. IfGlobal is set to false, only the first match will be found orreplaced, as applicable.

MultiLine: Determines whether matches canspan accross line breaks.


另见: https://docs.microsoft.com/en-us/previous-versions//1400241x%28v%3dvs.85%29
来自 https://www.regular-expressions.info/vbscript.html关于 VBScript 的正则表达式支持,因为我们使用的是 Microsoft VBScript 正则表达式 5.5

No mode modifiers to set matching options within the regular expression.

关于arrays - 不区分大小写的正则表达式 - VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59579008/

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