当前位置: 首页 > 知识库问答 >
问题:

Microsoft VBS正则表达式访问查询

许沛
2023-03-14

我正在尝试从存储在MS Access Query列中的文本字符串中替换SSN。评论字段是自由文本,我需要将标准SSN(即123-45-6789),当存在时,替换为XXX-XX-XXXX。

例如,我希望“JOHN DOE,111-11-1111REWARD 6 DOL已生成。提交选择应在07-FEB-35之前完成请遵守”变为“JOHN DOE, XXX-XX-XXXX REWARD 6 DOL已生成。提交选择应在07-FEB-35之前完成请遵守”

我在replace函数中使用了一个公共函数来完成任务,但我的模式没有按预期工作。访问查询条件和RegexMathc函数:

Expr1: Replace([Comments],RegexMatch([Comments],"\d{3}\-\d{2}\-\d{4}"),"XXX-XX-XXXX")

Public Function RegexMatch(value As Variant, pattern As String) As Boolean
    If IsNull(value) Then Exit Function
    ' Using a static, we avoid re-creating the same regex object for every call '
    Static regex As Object
    ' Initialise the Regex object '
    If regex Is Nothing Then
        Set regex = CreateObject("vbscript.regexp")
        With regex
            .Global = False
            .IgnoreCase = False
            .Multiline = False
            
        End With
    End If
    ' Update the regex pattern if it has changed since last time we were called '
    If regex.pattern <> pattern Then regex.pattern = pattern
    ' Test the value against the pattern '
    RegexMatch = regex.Test(value)
End Function

当我在regex101中尝试正则表达式模式时,它会毫无问题地找到SSN字符串,但它不会出现在我的访问查询列中。

共有1个答案

公德明
2023-03-14

您的正则表达式匹配返回一个布尔值,要么为True,要么为False。

这意味着,Replace被称为这样的东西:

Replace("JOHN DOE,111-11-1111, True reward", True, "XXX-XX-XXXX")

以下内容将被退回:

"JOHN DOE,111-11-1111, XXX-XX-XXXX reward"

您需要在单个函数中进行匹配和替换:

Public Function RegexReplace(value As Variant, Pattern As String, Replace As String) As String
    If IsNull(value) Then Exit Function
    ' Using a static, we avoid re-creating the same regex object for every call '
    Static regex As Object
    ' Initialise the Regex object '
    If regex Is Nothing Then
        Set regex = CreateObject("vbscript.regexp")
        With regex
            .Global = True 'We want to replace all occurrences
            .IgnoreCase = False
            .MultiLine = False
            
        End With
    End If
    ' Update the regex pattern if it has changed since last time we were called '
    If regex.Pattern <> Pattern Then regex.Pattern = Pattern
    ' Replace using the pattern
    RegexReplace = regex.Replace(value, Replace)
End Function
 类似资料:
  • 本文向大家介绍正则表达式速查表,包括了正则表达式速查表的使用技巧和注意事项,需要的朋友参考一下 字符 字符类 预定义字符类 POSIX 字符类(仅 US-ASCII) java.lang.Character 类(简单的 java 字符类型) Unicode 块和类别的类 边界匹配器 Greedy 数量词 Reluctant 数量词 Possessive 数量词 Logical 运算符 Back 引

  • 主要内容:查询以特定字符或字符串开头的记录,查询以特定字符或字符串结尾的记录,替代字符串中的任意一个字符,匹配多个字符,匹配指定字符串,匹配指定字符串中的任意一个,匹配指定字符以外的字符,使用{n}或者{nm}来指定字符串连续出现的次数正则表达式主要用来查询和替换符合某个模式(规则)的文本内容。例如,从一个文件中提取电话号码,查找一篇文章中重复的单词、替换文章中的敏感语汇等,这些地方都可以使用正则表达式。正则表达式强大且灵活,常用于非常复杂的查询。 MySQL 中,使用 REGEXP 关键字指定

  • 如何在C++中使用正则表达式查询MongoDB数据库。 Mongo-CXX-Driver-R3.1.1 包括听力 这是我尝试过的。 以前我用Java构建了一个软件,现在我正在尝试用Qt C++构建同样的软件,我是C++的新手。 下面是我在java中用于查询的查询代码。

  • 昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?

  • 在 OpenResty 中,同时存在两套正则表达式规范:Lua 语言的规范和 ngx.re.* 的规范,即使您对 Lua 语言中的规范非常熟悉,我们仍不建议使用 Lua 中的正则表达式。一是因为 Lua 中正则表达式的性能并不如 ngx.re.* 中的正则表达式优秀;二是 Lua 中的正则表达式并不符合 POSIX 规范,而 ngx.re.* 中实现的是标准的 POSIX 规范,后者明显更具备通用

  • 一、概述 二、匹配单个字符 三、匹配一组字符 四、使用元字符 五、重复匹配 六、位置匹配 七、使用子表达式 八、回溯引用 九、前后查找 十、嵌入条件 参考资料 一、概述 正则表达式用于文本内容的查找和替换。 正则表达式内置于其它语言或者软件产品中,它本身不是一种语言或者软件。 正则表达式在线工具 二、匹配单个字符 . 可以用来匹配任何的单个字符,但是在绝大多数实现里面,不能匹配换行符; . 是元字