使用 Visual Basic 函数在 Excel 中的正则表达式匹配和替换范围

2023-12-22

我正在寻找在 Excel(2010,Visual Basic 7)中创建一个名为 CODEMATCH 的用户定义函数,它将

1. Take a range as an input
2. Preserve the structure of the range when outputting
3. On each value in the range:
   a. If the value matches [matchPattern]:
      i. regex match the value against [matchPattern] and store it as [var1]
      ii. regex replace [var1] against [stripPattern] and store it as [var2]
      iii. return [var2]
  b. If the value does not match [matchPattern]:
      i. return an empty value

 Where
   matchPattern = "^[^A-Z0-9:]*[A-Z0-9][^A-Z0-9:]*[A-Z0-9]?"
   stripPattern = "[^A-Z0-9]*"

 AndWhere
   RegEx match is not global and respects case
   RexEx replace is global and respects case

 Such that
   "Nobody Cares about Bob" returns "NC"
   "1 Duck for Jody" returns "1D"
   "Apples: I Don't Like Them" returns "A"
   "foobar" returns ""

我的痛苦之一是我是 Visual Basic 的新手。我认为,我的部分痛苦来自于 Visual Basic 中存在多个版本的 RegEx,并且不知道哪个版本采用什么属性。

我尝试以复杂程度来构建该函数,这是我在遇到无法穿透的砖墙之前所能达到的极限:

Function CODEMATCH(ByVal valueIN As String) As String

Set matchRegEx = New RegExp
    matchRegEx.Pattern = "(sdi \d+)"  '<--what's giving me difficulty
    matchRegEx.Global = False
    matchRegEx.IgnoreCase = False

Set matches = matchRegEx.Execute(valueIN)

If matches.Count <> 0 Then
    CODEMATCH = matches.Item(0).SubMatches.Item(0)
Else
    CODEMATCH = ""
End If

End Function

代码是有效的,但它不允许我使用matchPattern我之前定义的。除此之外,我仍然需要采用它来执行正则表达式替换,并采用它来处理范围而不是单个单元格。


这怎么办? :)

Function CODEMATCH(ByVal valueIN As String) As String

Dim strTemp As String
Set matchRegEx = New RegExp
With matchRegEx
    .Pattern = "[^A-Z0-9:]*[A-Z0-9][^A-Z0-9:]*[A-Z0-9]?"
    .Global = False
    .IgnoreCase = False
If .Test(valueIN) Then
    Set matches = .Execute(valueIN)
    .Pattern = "[^A-Z0-9]*"
    .Global = True
    strTemp = matches(0)
    CODEMATCH = .Replace(strTemp, vbNullString)
Else
 CODEMATCH = vbNullString
End If
End With

End Function

test

Sub Test()
Debug.Print CODEMATCH("Nobody Cares about Bob")
Debug.Print CODEMATCH("1 Duck for Jody")
Debug.Print CODEMATCH("Apples: I Don't Like Them")
Debug.Print CODEMATCH("foobar")
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Visual Basic 函数在 Excel 中的正则表达式匹配和替换范围 的相关文章

随机推荐

  • 使用 C 的原始 libcurl JSON PUT 请求

    我目前正在编写一个类似 REST 的客户端 只需要执行 PUT 请求 Problem 运行该程序并没有在 URL 的 API 上给出正确的结果 我不知道为什么 使用curl easy perform curl 在调用时不会抛出错误 但 UR
  • 我应该在哪里设置 DataContext - 代码隐藏或 xaml?

    老实说 我搜索并阅读了所有似乎相关的 相关问题 我确实希望我没有 错过 其他地方的这个问题 但这里是 至少 有两种不同的方法来设置 DataContext 可以使用 XAML 也可以使用隐藏代码 什么是 最佳实践 为什么 我倾向于在 XAM
  • 如何在 MongoDB 上模拟“错误”事件

    我正在尝试为 NoFlo 组件 由同事编写 编写一个测试用例 该组件有一个 连接 输入端口和一个 错误 输出端口 例如 var self this a NoFlo Component var mongodb null self inPort
  • Meteor 允许更新插入吗?

    当我尝试更新插入集合时 在控制台中出现此错误 更新失败 访问被拒绝 受限集合中不允许更新插入 以下是我指定的允许规则 if Meteor isClient Meteor subscribe customers customers Custo
  • WinForms - Form.DoubleBuffered 属性是否影响放置在该窗体上的控件?

    Form具有 DoubleBuffered 属性 布尔值 继承自 Control 如果将此设置为 true 则放置在窗体上的所有控件是否都会由于位于窗体上而以双缓冲方式绘制到屏幕上 或者您需要担心它们自己的 DoubleBuffered 属
  • 混合托管/非托管 C++?

    我有一个用标准 C 编写的库 我还有一个用 C 编写的 Net Windows 窗体应用程序 它利用非托管库 我知道我可以只使用 pinvoke 但我的 C 完全是面向对象的 我真的不想乱搞编组等 有没有一种方法可以让我创建一个新的托管 C
  • codeigniter 的自定义配置文件

    对 CodeIgniter 非常陌生 尝试创建自定义配置文件以将特殊变量加载到我的应用程序中 in application config 我创建custom php并将以下代码放入该文件中 然后我就打开了application config
  • 在第三方、非 AMD 库中使用 AMD 定义的模块

    我有一个图书馆 叫它SomeLib 定义为支持各种模块加载器 function global factory if typeof define function define amd define factory else if typeo
  • 可以对 header(Location: value) 中的值进行 urlencode 吗?

    这是PHP I do header Location url 并且效果很好 但如果我这样做 header Location urlencode url 我被重定向到一些奇怪的地方 比如 url url 当然 它给了我一个 404 错误 但我
  • 这会导致万向节锁定吗?

    我制作了一个非常简单的 3D 场景 在世界坐标中有 5 个点 我想在场景中导航 因此我定义了一个具有 UP 和 OUT 向量的相机 有了这些信息 我在每一帧中生成一个旋转矩阵 我将其应用于向量以获得相机坐标 问题是 我已经读到使用此方法时会
  • 比较两个枚举*类型*的等价性?

    在我的应用程序中 我有两个等效的enums 一个位于 DAL 中 另一个位于服务契约层中 它们具有相同的名称 但位于不同的命名空间中 并且应该具有相同的成员和值 我想编写一个单元测试来强制执行此操作 到目前为止 我已经得到以下内容 publ
  • 在 Node.js 中读取 PNG 图像

    Node js 中有没有一种简单的方法来读取 PNG 文件并获取图像的像素 就像是节点图像 https github com pkrumins node image 但另一种方式 我浏览了列出的图书馆https github com joy
  • 如何确定最便宜的通勤票组合

    My 当地火车服务 http www sunrail com default aspx faresandpasses reloadable htm最近添加了日常通勤的选项 我正在尝试确定一种算法 用于查找给定日期的一组给定往返行程的最便宜的
  • 使用 uploadify 时出现 HTTP 错误 302

    我使用 uploadify 将文件上传到我的网站 它与一家托管公司合作 并且不与其他公司 sweb ru 合作 错误是 HTTP 错误 302 有谁知道如何解决这个问题 谢谢 对于任何在 Uploadify 和 PHP 框架 例如 Code
  • Eclipse 命令行插件

    我需要一个在 Linux 下运行 shell 脚本的 Eclipse 插件 我有一个漂亮的 Rsync 脚本 我想要 Eclipse 中的一个按钮来激活它 最好的解决方案是 当我保存东西时 Rsync shell 脚本也被激活 所以也许我可
  • Linq2Sql - 使用本地集合作为子查询的一部分 - “不支持使用本地集合的查询”

    Ok 上次我发布此内容 上周 时 我没有正确描述问题 我创建了这个问题的快速示例 如果您将其用作基本查询的一部分 则查询本地集合可以正常工作 我发现的问题是将它与子查询的一部分一起使用 例如 如果不给你们提供数据库图或代码图 这是相当难以描
  • Jackson ObjectMapper 设置 JsonFormat.Shape.ARRAY 不带注释

    我需要使用两个 jackson 2 对象映射器 两个映射器都使用同一组类 首先 我需要使用标准序列化 在第二个中 我想对所有类使用 ARRAY 形状类型 请参阅https fasterxml github io jackson annota
  • JAX-RS 和未知查询参数

    我有一个调用 RESTEasy JAX RS Java 服务器的 Java 客户端 我的某些用户可能拥有比服务器版本更新的客户端版本 该客户端可能会调用服务器上包含服务器不知道的查询参数的资源 是否可以在服务器端检测到这一点并返回错误 我知
  • Android Studio 不显示颜色

    我使用 android studio 进行图层主题 使用 android studio 进行主题化很容易 因为我可以在左侧看到 studio 本身的颜色 检查我所指的屏幕截图 但在 CM13 模板中我不知道有什么问题它不显示颜色 我是 an
  • 使用 Visual Basic 函数在 Excel 中的正则表达式匹配和替换范围

    我正在寻找在 Excel 2010 Visual Basic 7 中创建一个名为 CODEMATCH 的用户定义函数 它将 1 Take a range as an input 2 Preserve the structure of the