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

2024-01-13

Background:

刚才我正在回答一个问题,正在玩玩RegEx within VBA。目标是创建字符串中存在的名称列表。RegEx是首选解决方案,因为我们想防止VBA绊倒看起来相似的标点符号和子字符串,例如:Jack or Jacky.


Sample Data:

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

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

我们想知道字符串中提到了某个数组中的哪些名称,例如:

Dim arr As Variant: arr = Array("Jack", "Frank")

Sample Code:

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

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

Problem:

虽然上面的代码可以整齐地返回两次命中,但它不能不区分大小写。例如,更改以下行只会返回Jack:

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

我想我可以通过使用关闭区分大小写来解决这个问题(?i):

regex.Pattern = "(?i)\b(" & Join(arr, "|") & ")\b"

但问题是这对于大多数语言来说都可以完美工作(在这里测试 https://regex101.com/r/Cq0P39/2), 然而VBA似乎有问题并生成Error 5017执行后。


Question:

有人知道为什么吗?这是否不支持VBA或者我的语法错误?如果不支持,有什么替代方法可以让命中不区分大小写,同时保留以下可能性Join名称数组?

Bonus-Question:

最终我想Join the Hits通过分隔符连接在一起,例如:

Debug.Print Join(regex.Execute(str),", ")

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


设置 RegExp 对象的属性,即

regex.ignorecase = True

正则表达式对象 https://bytecomb.com/regular-expressions-in-vba/

RegExp 对象具有三个影响正则表达式的属性 应用表达式:

IgnoreCase:我相信这是不言自明的

全局:确定 是否在输入字符串中查找所有可能的匹配项。如果 Global 设置为 false,只会找到第一个匹配项或 更换(如适用)。

多行:确定匹配是否可以 跨越换行符。

也可以看看:https://learn.microsoft.com/en-us/previous-versions//1400241x%28v%3dvs.85%29 https://learn.microsoft.com/en-us/previous-versions//1400241x%28v%3dvs.85%29

并从https://www.regular-expressions.info/vbscript.html https://www.regular-expressions.info/vbscript.html关于 VBScript 的正则表达式支持,因为我们使用的是 Microsoft VBScript 正则表达式 5.5

没有模式修饰符可以在正则表达式中设置匹配选项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不区分大小写的正则表达式 - VBA 的相关文章

  • 将平面数组拆分为分组子数组,其中包含输入数组中连续键的值

    我有一个数组array diff函数 如下所示 Array 0 gt world 1 gt is 2 gt a 3 gt wonderfull 5 gt in 6 gt our 正如您所看到的 键 3 和键 5 之间有一个间隙 即没有键 4
  • 在一个单元格中显示两个日期

    我正在尝试在 Excel 的一个单元格中显示两个日期 我使用了以下公式 DATE YEAR NOW MONTH NOW I1 DATE YEAR NOW MONTH NOW I15 其中I1和I15的值分别为1和15 我选择这个公式的原因是
  • 电子邮件正文为空,没有 .Display

    我读过这个 VBA Outlook 2010 收到邮件 正文为空 https stackoverflow com questions 42348518 vba outlook 2010 received mail body is empty
  • 调用 UDF 时公式中使用的值的数据类型错误

    我一直在努力找出这里出了什么问题 我有两个包含字符串值的列 我使用第三列调用工作表中的 UDF 但最终得到 Value 并出现错误 公式中使用的值的数据类型错误 Eg Col I Col J File1 Y File1 N File2 Y
  • 我需要使用 VBA 将数据从 Excel 插入 SQL Server

    我需要插入test vba xlsx将数据写入 SQL Server 到特定数据库 Sub insertion Dim conn As ADODB Connection Dim rs As ADODB Recordset Dim sConn
  • excel公式剥离html

    我想从文本值的左侧和右侧剥离所有 html 我有这个
  • 在Python中比较字符串的最快方法

    我正在用 Python 编写一个脚本 该脚本将允许用户输入一个字符串 该字符串将是指示脚本执行特定操作的命令 为了便于讨论 我会说我的命令列表是 lock read write request log 现在 我希望用户能够输入 log 一词
  • 更改数组键而不更改顺序

    You can 更改 数组元素的键 https stackoverflow com questions 240660 in php how do you change the key of an array element只需设置新密钥并删
  • vba - 扫描文档中的宏并替换宏文本?

    我面临一个谜题 我工作的地方有大量的 Word 模板 它们都包含一个包含一些错误的自动新建事件句柄 这个错误存在于所有模板中 我想知道是否有一种方法可以扫描包含此宏的模板的目录并稍微更改宏代码 这可能吗 是的 你可以这么做 您可以使用以下方
  • 为什么 findall 在与组匹配时不返回整个匹配项? [复制]

    这个问题在这里已经有答案了 正如我读过的 dog cat food会寻找dog food and cat food但我无法用我的案例重现它 gt gt gt for m in re findall RA a zA Z0 9 RAJA4590
  • PHP Microsoft Excel 文件生成/导出类

    我一直在寻找一个好的 Excel 文件生成类 但还没有找到 我的首要问题是 虽然我可以在 Excel 中打开导出的文件 运行 2007 年 但我总是收到一条警告 文件的格式与文件扩展名不同 我注意到 phpMyAdmin 中的 Excel
  • 将字符串转换为整数数组 String at = "1 2 3 4 5" 转换为 ar=[1,2,3,4,5]

    我正在读取一个字符串 作为一整行数字 用空格分隔 即1 2 3 4 5 我想将它们转换为整数数组 以便我可以操作它们 但这段代码不起作用 它说不兼容的类型 String str br readLine int array new int 4
  • 随着数据的增加自动填充公式并动态排序[重复]

    这个问题在这里已经有答案了 我想对工作表中的数据进行排序 该工作表每天都会在第二个工作表中获取新行 问题是 如果我使用 SMALL 函数并自动填充单元格直到最后一行 A102482 或类似的内容 我的文件会变得非常巨大且滞后 gt 20mb
  • 在 Javascript 中按日期对数组进行排序

    我在用着sort 按日期排序数组 elements data sort function a b return a date getTime b date getTime 问题是某些元素缺少日期 或日期无效 这导致了这个错误 无法读取属性
  • Python:使用Excel CSV文件仅读取某些列和行

    虽然我可以读取 csv 文件而不是读取整个文件 但如何仅打印某些行和列 想象一下这是 Excel A B C D E State Heart Disease Rate Stroke Death Rate HIV Diagnosis Rate
  • 检查数组元素的大小是否相同

    有没有最好 最有效的方法来检查数组元素的大小是否相同 1 2 3 4 5 gt false 1 2 3 4 5 6 gt true 我有什么 def element of same size arr arr map size uniq si
  • 如何在Python中一次比较二维数组的2列与另一个数组的列

    我有两个字符串数组 每个数组有三列 我想比较两个二维数组的前两列 有 3 列和 4000 行 如果它们匹配 那么我需要那些匹配的值 但是我的代码不起作用 这是一个示例 array1 1stcolumn 2ndColumn 3rdColumn
  • 正则表达式 - 从字符串末尾搜索

    我如何从字符串末尾定位某些内容 complexthing 50 other 50 MORE 50 我想以 50 结尾 但是这个 复杂的东西 可以以 结尾 所以在这种情况下 我不能在 处打断 因为乞求可能会让它感到困惑 所以对我来说最简单的正
  • 访问结构向量

    我有一个结构 struct OutputStore int myINT string mySTRING 如果我创建一个 OutputStore 类型的数组 如下所示 OutputStore OutputFileData new Output
  • Data.Array 有多快?

    The 文档 http haskell org ghc docs latest html libraries array 0 3 0 3 Data Array html of Data Array reads Haskell 提供了可索引数

随机推荐

  • 错误:光标'对象没有属性'_last_execulated

    我有这个光标 cursor execute SELECT price FROM Items WHERE itemID SELECT item id FROM Purchases WHERE purchaseID d AND customer
  • 如何以编程方式创建布局文件

    我想知道是否可以动态创建一个 XML 布局文件来显示给用户 这个想法是能够从中央服务器检索布局文件 该文件可以显示这个动态的 服务器驱动的 GUI XML 布局文件被打包为二进制文件 并且膨胀也从二进制文件发生 我不相信任意 XML 都可以
  • 单击选项卡时返回 UINavigationController 堆栈的顶部?

    我有一个UITabBarController有 4 个选项卡的界面 每个选项卡都有一个UINavigationController 我怎样才能回到最上面UIViewController每一个UINavigationController每当按
  • 搜索结果使用reactjs突出显示结果

    我试图获得像 YouTube 这样的搜索结果 只是尝试 但我遇到了一些问题 我已经在codesandbox中制作了工作应用程序here https codesandbox io s react codesandbox kyd4g 我有一个搜
  • DataBinding/WPF C# 的通用可观察字典类

    我正在尝试在 C 中为 WPF DataBinding 创建一个可观察字典类 我在这里找到了安迪的一个很好的例子 WPF 中字典的两种方式数据绑定 https stackoverflow com questions 800130 two w
  • 如何使用 jQuery UI 日历/日期选择器显示周而不是日?

    在过去的几个月里 我一直在使用 jQuery UI 日历 日期选择器 并取得了巨大的成功 我收到了一项新要求 允许选择一周 周日至周六 而不是一天 以前有人完成过这个吗 按周而不是按天突出显示 在文本框 标签中显示开始日期和结束日期而不是单
  • 在角度反应形式验证器中使用 google-libphonenumber

    这是使用该库的基本用例 我需要验证该号码是否有效 我用的是有角度的反应形式 https angular io guide reactive forms 自定义验证器 https angular io guide form validatio
  • numpy loadtxt 跳过第一行

    当我尝试使用 numpy 的 loadtxt 函数从 CSV 文件导入数据时 遇到一个小问题 这是我拥有的数据文件类型的示例 将其命名为 datafile1 csv Comment 1 Comment 2 x y z 1 2 3 4 5 6
  • 将异常类型添加到位框架已知异常

    根据文档 位框架中有一些已知的异常类型 https docs bit framework com docs bit server side web api html exceptions https docs bit framework c
  • 修复 WooCommerce 中购物车最大优惠券折扣百分比

    我在 woocommerce 中有一个优惠券代码 XYZ25 其中包含 25 的折扣 最大折扣为 250 卢比 如果用户应用优惠券代码 XYZ 25 获得 25 的折扣 我如何限制用户获得不超过 250 卢比的折扣 自 Woocommerc
  • ajax给出空白响应

    我有一个 xml 内容存储在该位置 http localhost 8080 cleo primer rest elements search uid 1 query facebook
  • 如何在 Eclipse RCP 中实现内容辅助的文档弹出窗口

    我已经实现了自己的编辑器并为其添加了代码完成功能 我的内容助理在源查看器配置中注册 如下所示 public IContentAssistant getContentAssistant ISourceViewer sourceViewer i
  • 谷歌云数据实验室和谷歌云人工智能平台笔记本有什么区别?

    我正在研究建立端到端机器学习管道的最佳方法 并评估数据探索组件选项 我试图找出谷歌云数据实验室和谷歌云人工智能平台笔记本之间的区别 它们似乎都提供类似的功能 因此不确定它们为何存在 或者其中一个是否是另一个的新迭代 如果它们不同 其中一种相
  • TensorFlow - 如何在忽略零权重的情况下计算梯度?

    我想通过将一些权重设置为 0 0 每层中的特定权重 以此处讨论不重要的方式选择 来实现剪枝 以 1 在推理过程中忽略它们 2 在训练过程中忽略它们 我知道我可以在推理过程中忽略它们 方法是对每一层应用一个掩码 其中 1 位于我想要保留的权重
  • iOS 导航状态栏

    谷歌地图已经有一个蓝色栏 只要您在导航中就会出现 我想知道我自己如何实现这一点 有任何想法吗 配置您的应用程序以使用 Core Location在后台 当您请求授权时 正如您现在必须在 iOS 8 中执行的那样 请请求 使用时 授权 每当您
  • Android 光标怎么会处于负数位置?

    在学习迭代游标时 我learned https stackoverflow com questions 10723770 whats the best way to iterate an android cursor我需要首先移动到位置 1
  • 如何在 Laravel 中实现 Gravatar?

    在 Laravel 中实现 Gravatar URL 的最快方法是什么 我有一个必填的电子邮件地址字段 但我不想为 Gravatars 创建新列 并且我更愿意使用本机Auth user 属性 事实证明 您可以使用 Laravel 变异器来创
  • 如何在部署期间配置 Cosmos Db 集合

    使用 Azure 以 GlobalDocumentDB 模式部署 Cosmos Db 数据库时资源管理器模板 https learn microsoft com en us azure templates microsoft documen
  • mysql 根据原始 sql 创建过程的问题

    我正在 Symfony2 中处理一个应用程序项目 通过注册 每个客户端都会创建一个数据库 模式是在客户端登录时由验证服务创建的 该应用程序需要一些数据才能工作 到目前为止 我使用了 ORM 夹具 由于多种原因 我现在需要从夹具加载转向更接近
  • 不区分大小写的正则表达式 - VBA

    Background 刚才我正在回答一个问题 正在玩玩RegEx within VBA 目标是创建字符串中存在的名称列表 RegEx是首选解决方案 因为我们想防止VBA绊倒看起来相似的标点符号和子字符串 例如 Jack or Jacky S