所以我的公司重建了他们的整个内部网,由于他们没有实施301重定向,现在公司Word文档中存在大量无效链接。
我创建了一个宏但需要有关正则表达式的帮助,以便找到格式的链接:
http://foo/bar/baz.php?id=string1:string2:string3:string4
并将其替换为:
https://abc/def/ghi/string1/string2/string3/string4.aspx
请注意,string2,string3和string4并不总是存在。
我的尝试
搜索:http://foo/bar/baz.php\?id=([\w]*):?([\w]*):?([\w]*):?([\w]*)
替换:https://abc/def/ghi/$1/$2/$3/$4.aspx
这个问题是如果不存在string2,string3或string4,我最终会得到类似http://abc/def/ghi/string1///.aspx
的内容我真的很感激你能给我的任何帮助。您不必在答案中使用VBA正则表达式。
答案 0 :(得分:0)
我只是抓住整个string1:string2:...
部分,用斜杠替换冒号,将其放入所需的网址格式,然后附加.aspx
。因此,您的主正则表达式只会在?id=
之后获取查询字符串:
http://foo/bar/baz.php\?id=(.*)
答案 1 :(得分:0)
这是一个演示如何在没有VBA中的正则表达式的情况下完成它:
Sub replace_url()
Dim s As String, known As String, repl As String, res As String
s = "http://foo/bar/baz.php?id=string1:string2:string3:string4"
known = "http://foo/bar/baz.php?id="
repl = "https://abc/def/ghi/" '$1/$2/$3/$4.aspx
If Left(s, Len(known)) = known Then ' if the string starts with known substring
Dim chunks() As String
chunks = Split(Mid(s, Len(known) + 1), ":")
res = repl & Join(chunks, "/") & ".aspx"
End If
End Sub
这里的要点是我们有一个已知的起始子串http://foo/bar/baz.php?id=
。我们检查有问题的字符串是否以它开头,然后获取其余字符串并使用:
进行拆分。然后,通过将数组与/
连接并附加.aspx
来构建结果。