仅搜索和替换整个单词 [英] search and replace WHOLE WORDS ONLY
问题描述
我正在寻找一种仅搜索和替换整个单词的方法.因为在我的情况下,整个单词不仅可以用空格分隔,还可以用 .,;:/?等等.我想不出一种有效的方法来编码.
I'm looking for a way to search and replace WHOLE WORDS ONLY. Since the whole words in my case can be separated not only by a space but .,;:/? etc. I can't think of an efficient way to code this.
基本上,我想做这样的事情
Basically, I'm looking to do something like this
replace([address], ***--list of separators, like .,;:/?--*** & [replacewhat] & ***--list of separators, like .,;:/?--*** ," " & [replacewith] & " ")
我不知道如何一次传递一个分隔符列表,而不是为每个分隔符组合运行一次替换函数(与我要替换的 300 个单词相结合,查询数量将达到疯狂数量)
I don't know how to pass a list of separators at once instead running a replace function once for each COMBINATION of separators (which combined with 300 words I'm replacing would amount to an insane number of queries)
推荐答案
您可以使用带有 标记(用于单词边界)前后的模式使用正则表达式进行替换您要替换的单词.
You can do a replacement with a regular expression using a pattern with the marker (for the word boundary) before and after the word you want to replace.
Public Function RegExpReplaceWord(ByVal strSource As String, _
ByVal strFind As String, _
ByVal strReplace As String) As String
' Purpose : replace [strFind] with [strReplace] in [strSource]
' Comment : [strFind] can be plain text or a regexp pattern;
' all occurences of [strFind] are replaced
' early binding requires reference to Microsoft VBScript
' Regular Expressions:
'Dim re As RegExp
'Set re = New RegExp
' with late binding, no reference needed:
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
re.Global = True
're.IgnoreCase = True ' <-- case insensitve
re.pattern = "" & strFind & ""
RegExpReplaceWord = re.Replace(strSource, strReplace)
Set re = Nothing
End Function
正如所写,搜索区分大小写.如果您希望不区分大小写,请启用此行:
As written, the search is case sensitive. If you want case insensitive, enable this line:
re.IgnoreCase = True
在立即窗口中...
? RegExpReplaceWord("one too three", "too", "two")
one two three
? RegExpReplaceWord("one tool three", "too", "two")
one tool three
? RegExpReplaceWord("one too() three", "too", "two")
one two() three
? RegExpReplaceWord("one too three", "to", "two")
one too three
? RegExpReplaceWord("one too three", "t..", "two")
one two three
... 以及您的分隔符范围...
... and for your range of delimiters ...
? RegExpReplaceWord("one.too.three", "too", "two")
one.two.three
? RegExpReplaceWord("one,too,three", "too", "two")
one,two,three
? RegExpReplaceWord("one;too;three", "too", "two")
one;two;three
? RegExpReplaceWord("one:too:three", "too", "two")
one:two:three
? RegExpReplaceWord("one/too/three", "too", "two")
one/two/three
? RegExpReplaceWord("one?too?three", "too", "two")
one?two?three
? RegExpReplaceWord("one--too--three", "too", "two")
one--two--three
? RegExpReplaceWord("one***too***three", "too", "two")
one***two***three
这篇关于仅搜索和替换整个单词的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!