在MS Access中解析文本

时间:2020-03-06 14:58:14  来源:igfitidea点击:

我有包含字符串的列。该列中的字符串如下所示:

FirstString / SecondString / ThirdString

我需要解析它,所以我有两个值:

值1:FirstString / SecondString
值2:ThirdString

我实际上可以有更长的字符串,但是我总是和[string1 / string2 / string3 / ...] [stringN]分开

我需要结束的是:

列1:[string1 / string2 / string3 / etc ....]
第2栏:[stringN]

无论如何,我都找不到执行此操作的权限。有什么建议?我需要正则表达式吗?如果是这样,是否可以在查询设计器中执行此操作?

更新:这两个表达式都给我这个错误:"我们输入的表达式包含无效的语法,或者我们需要将文本数据括在引号中。"

expr1: Left( [Property] , InStrRev( [Property] , "/") - 1), Mid( [Property] , InStrRev( [Property] , "/") + 1)

expr1: mid( [Property] , 1, instr( [Property] , "/", -1)) , mid( [Property] , instr( [Property] , "/", -1)+1, length( [Property] ))

解决方案

mid(col,1,instr(col," /",-1)),mid(col,instr(col," /",-1)+1,length(col))

在查询中,使用以下两个表达式作为列:

Left(col, InStrRev(col, "/") - 1), Mid(col, InStrRev(col, "/") + 1)

col是专栏。

如果在VBA中,请使用以下命令:

last_index= InStrRev(your_string, "/")

first_part= Left$(your_string, last_index - 1)
last_part= Mid$(your_string, last_index + 1)

我们是否有机会修复基础数据结构以使其正确规范化,从而可以首先避免出现此问题?除了检索数据之外,还会带来整个主机或者准确维护数据的问题,如果我们不在单个字段中存储多个值,那么所有这些都将得到改善。

我知道我们正在尝试在查询中执行此操作,因此SQL字符串函数可能是最好的选择。

但是,值得一提的是,有一个可从VBA访问的正则表达式COM对象。只需在宏代码内部添加对Microsoft VBScript正则表达式库的引用。

然后你可以做这样的事情

Dim szLine As String
Dim regex As New RegExp
Dim colregmatch As MatchCollection

With regex
    .MultiLine = False
    .Global = True
    .IgnoreCase = False
End With

szLine = "FirstString/SecondString/ThirdString"

regex.Pattern = "^(.*?\/.*?)/(.*?)$"
Set colregmatch = regex.Execute(szLine)

'FirstString/SecondString
Debug.Print colregmatch.Item(0).submatches.Item(0)
'ThirdString
Debug.Print colregmatch.Item(0).submatches.Item(1)