我有一个数据列,其标题值包含多个级别,其中我只想要前三个级别,但我无法弄清楚如何获取解析后的值?
我正在阅读this并且它显示了如何使用创建函数来为条件返回布尔值,但是如何创建一个返回已解析值的函数?
这是我认为我需要的正则表达式。
^(\d.\d.\d)
我正在寻找可以将1.2.3.4.5.
更改为1.2.3
的内容以及类似于我拥有超过三个级别的任何其他标题的内容。
理想情况下,我希望能够将其作为Field Expression
放入我的查询设计中,但我不确定如何做到这一点。
答案 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中具有特殊含义。