在 REPLACE 函数中使用通配符的 MS Access
Posted
技术标签:
【中文标题】在 REPLACE 函数中使用通配符的 MS Access【英文标题】:MSAccess using a wildcard in the REPLACE function 【发布时间】:2019-01-26 16:09:30 【问题描述】:我正在尝试做一些简单的事情,但我不明白为什么它不起作用。我真的是 MS Access VBA 的新手。
我在文本框中有一个字符串:
\\p9990cdc\C$\Temp
我想把它变成: C:\温度
我正在尝试:
strSelectedFile = Replace(strSelectedFile, "\\*\C$", "C:")
它不工作。
不知道为什么 RegEx 也不起作用:
strSelectedFile = Replace(strSelectedFile, "\\[\w]\C$", "C:")
一切都设置正确,所以问题完全在于替换代码,因为如果我尝试例如:
strSelectedFile = Replace(strSelectedFile, "C$", "C:")
它可以正常工作并成功地将 C$ 替换为 C:
\p9990cdc\C:\Temp
我怎样才能做到这一点?
非常感谢您的宝贵时间!
【问题讨论】:
【参考方案1】:您可以改为使用Mid(Instr())
查找$
的索引并从那里获取字符串(减1 以保留目录字母)。
strSelectedFile = Replace(Mid(strSelectedFile, InStr(strSelectedFile, "$") - 1, Len(strSelectedFile)), "$", ":")
【讨论】:
太好了,它有效,非常感谢我的朋友!提醒我为什么我从不喜欢 VBA ;) 那么我应该明白替换功能不支持正则表达式或通配符吗? @RakhaRegex.Replace()
可以工作,但需要 a little bit more legwork 才能在 VBA 中工作。对于内置的Replace()
,老实说我不确定但基本上没有examplesI've seen 以这种方式使用它。
谢谢。最后一个问题,我如何编写一个 IF 以便它只在字符串包含 \*\C$ 时进行替换? (* 表示任何意思)是否可以使用 RegEx 执行 IF,例如: "\[\w]\C$" ?非常感谢
@Rakha 只需搜索If Instr(strSelectedFile, "\C$") Then
@Rakha 就能涵盖您的所有案例吗?【参考方案2】:
Replace
不使用通配符。您可以实现自己的功能,或使用 VBScript.RegEx
使用正则表达式。
我已经编写了一个小函数来为你做这件事。然而,性能并不理想,我只做了一点测试。它适用于您的示例输入。
Public Function LikeReplace(strInput As String, strPattern As String, strReplace As String, Optional start As Long = 1)
Dim LenCompare As Long
Do While start <= Len(strInput)
For LenCompare = Len(strInput) - start + 1 To 1 Step -1
If Mid(strInput, start, LenCompare) Like strPattern Then
strInput = Left(strInput, start - 1) & strReplace & Right(strInput, Len(strInput) - (start + LenCompare - 1))
End If
Next
start = start + 1
Loop
LikeReplace = strInput
End Function
使用您的输入并将Replace
与此LikeReplace
交换应该可以正常工作。
【讨论】:
感谢您的意见,非常有用【参考方案3】:您可以只使用VBScript.RegEx
和正确的模式。
Public Function ReplacePattern(ByRef iString As String, iSearchPattern As String, iReplaceWith As Variant)
'---------------------------------------------------------------------------------------
' Procedure : ReplacePattern
' Purpose : Searches a string by pattern and replaces the text with given value
' Returns : Replaced string.
'---------------------------------------------------------------------------------------
'
Dim RE As Object
Set RE = CreateObject("VBScript.RegExp")
RE.ignorecase = True
RE.Global = True
RE.Pattern = iSearchPattern
iString = RE.Replace(iString, iReplaceWith)
ReplacePattern = iString
On Error Resume Next
Set RE = Nothing
End Function
阅读更多关于模式Here
模式:"^\\\\.*C\$"
=> 以 \\ 开头 + 除换行符 + C$ 之外的任意数量的任意字符
用法
??replacepattern("\\p9990cdc\C$\Temp","^\\\\.*C\$","C:")
=> C:\Temp
【讨论】:
以上是关于在 REPLACE 函数中使用通配符的 MS Access的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 C# 在 MS-Access 中的查询中使用带有通配符的 LIKE 运算符