【问题标题】:How can I have my Access VBA regex return all possible matches instead of only the first match?如何让我的 Access VBA 正则表达式返回所有可能的匹配项,而不仅仅是第一个匹配项?
【发布时间】:2019-01-11 06:22:30
【问题描述】:

这是我当前的代码,它只返回第一个匹配项,我需要返回所有匹配项。例如,[电话号码 1] & [电话号码 2] & [电话号码 3]...但它只返回 [电话号码 1]。

Public Function X_FIND( _
    ByVal SourceString As String, _
    ByVal Pattern As String, _
Optional ByVal IgnoreCase As Boolean = True, _
    Optional ByVal MultiLine As Boolean = True, _
    Optional ByVal MatchGlobal As Boolean = True) As String

    Dim re As New regexp
        re.MultiLine = MultiLine
        re.IgnoreCase = IgnoreCase
        re.Global = MatchGlobal
        re.Pattern = Pattern
    Dim m
    For Each m In re.Execute(SourceString)
        X_FIND = m.Value
    Next
End Function

【问题讨论】:

  • 在循环中连接您的值,然后在循环后将 X_FIND 设置为该连接值。更好的是toss the matches into an array and JOIN() the array at the end for your output。按照您现在编写的方式,您将第一个匹配项作为函数返回返回,然后......您的后续循环将被忽略。
  • 另外,确保 Global 设置为 True
  • 我有点明白你的意思,你介意输入吗?对不起,我是一个视觉人,所以我想看看你的意思。而且我相信 global 设置为 true?
  • @CoderTanner 对于Global,默认值为True,但您可以在X_FIND的第5个参数中将其覆盖为False。仔细检查你不是。
  • @June7 所以我从查询中调用函数,“X_FIND(STRING_SOURCE,PATTERN)。我调用它的查询是一个有多种可能性的备注字段。对于这个例子我说我只是将要查找电话号码。在备忘录字段中可能有 o 到 500 个可能的电话号码模式。所以我想将所有这些都收集在一个字段中,就像 JNevill 所说的那样连接在一起。比如“111-111-1111, 222 -222-2222 等”希望对您有所帮助!谢谢!

标签: regex vba ms-access


【解决方案1】:

我在函数中更改了 1 行:

X_FIND = X_FIND & "," & m.value

我用输入测试了函数:

Mid(X_FIND("999-999-9998 abckd 999-999-9999", "[0-9]{3}-[0-9]{3}-[0-9]{4}"),2)

返回字符串:

999-999-9998,999-999-9999

如果电话号码可能重复,请使用模式:
"([0-9]{3}-[0-9]{3}-[0-9]{4})(?!.*?\1.*$)"

仅返回每个唯一值的最后一个匹配项。

如果您想确保返回按升序排列,则需要更多代码,据我所知,这并不简单,并且涉及将唯一匹配项写入数组(使用 Split 函数很容易)或收集并应用冒泡排序或其他算法(这是复杂的部分)。

【讨论】:

  • 有效!哇谢谢!它给了我我需要的东西,所以谢谢你!你知道我怎么做才能让它没有任何重复的回报吗?示例:“999-999-9998 abckd 999-999-9999 asdf 999-999-9998”返回“999-999-9998,999-999-9999”。也许只是“x_FIND = 公式”中的 if 语句?
  • 查看修改后的答案。
  • 完美运行!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 2013-12-01
  • 2021-10-12
  • 2017-11-17
  • 2012-09-05
  • 1970-01-01
相关资源
最近更新 更多