如何使用RegEx返回已解析的值?

时间:2014-01-22 14:35:47

标签: regex ms-access expression

我有一个数据列,其标题值包含多个级别,其中我只想要前三个级别,但我无法弄清楚如何获取解析后的值?

我正在阅读this并且它显示了如何使用创建函数来为条件返回布尔值,但是如何创建一个返回已解析值的函数?

这是我认为我需要的正则表达式。

^(\d.\d.\d)

我正在寻找可以将1.2.3.4.5.更改为1.2.3的内容以及类似于我拥有超过三个级别的任何其他标题的内容。

理想情况下,我希望能够将其作为Field Expression放入我的查询设计中,但我不确定如何做到这一点。

2 个答案:

答案 0 :(得分:2)

我假设您的输入值在点之间可能有多个数字。换句话说,我想你想要这个......

? RegExpGetMatch("1.2.3.4.5.", "^(\d+\.\d+\.\d+).*", 1)
1.2.3
? RegExpGetMatch("1.27.3.4.5.", "^(\d+\.\d+\.\d+).*", 1)
1.27.3

如果这是正确的行为,这是我使用的功能。

Public Function RegExpGetMatch(ByVal pSource As String, _
    ByVal pPattern As String, _
    ByVal pGroup As Long) As String

    'requires reference to Microsoft VBScript Regular Expressions
    'Dim re As RegExp
    'Set re = New RegExp
    'late binding; no reference needed
    Dim re As Object
    Set re = CreateObject("VBScript.RegExp")

    re.Global = True
    re.Pattern = pPattern
    RegExpGetMatch = re.Replace(pSource, "$" & pGroup)
    Set re = Nothing
End Function

另见this answer KazJaw。他的回答告诉我如何用RegExp.Replace选择匹配组。

在Access会话中运行的查询中,您可以使用如下函数:

SELECT
    RegExpGetMatch([Data Column], "^(\d+\.\d+\.\d+).*", 1) AS parsed_value
FROM YourTable;

但请注意,自定义VBA函数不适用于从Access会话外部运行的查询。

答案 1 :(得分:0)

尝试将您的RegEx更改为^(\d\.\d\.\d)。您需要转义.,因为它在RegExp中具有特殊含义。