我可以使用正则表达式查找和替换Microsoft Word文档中的IP地址,但是我无法对电子邮件地址和网址执行相同操作。
以下是经过测试的网址和电子邮件地址的正则表达式,因此我知道它们有效。我一直无法让宏使用它们进行查找和替换。
网址:“((https | http)://)?([0-9a-zA-z .-] +)。([0-9a-zA-Z。] {2,6})( [0-9A-ZA-Z .- /] +)“
电子邮件:“[a-zA-Z0-9。] +(\ @)[a-zA-Z] +(。)[a-zA-Z0-9] {2,6}”
Sub Test()
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.MatchWildcards = True
' Remove IPs
With Selection.Find
.Text = "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"
.Replacement.Font.ColorIndex = wdRed
.Replacement.Text = "[IP REMOVED]"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
我使用以下代码测试了我的正则表达式:
Sub Test_Regex()
Dim objRegExp As Object
Set objRegExp = CreateObject("vbscript.regexp")
objRegExp.Global = IsGlobal1
objRegExp.Pattern = "((https|http)\:\/\/)?([0-9a-zA-z\.\-]+)\.([0-9a-zA-Z\.]{2,6})([0-9a-zA-z\.\-\/]+)?"
objRegExp.IgnoreCase = Not IsCaseSensitive1
RegExpReplace = objRegExp.Replace("google.com/asdasd/asda/asda.cssd", "RegexWorks")
MsgBox (RegExpReplace)
End Sub
@WiktorStribiżew - 我尝试使用基于您最近评论的正则表达式来保留格式,但是当我运行它时它仍然会剥离格式。这个urlPattern正则表达式和你描述的一样吗?
Sub Test()
Dim urlPattern As String: urlPattern = "((https)\:\/\/)([0-9a-zA-z\.\-]+)\.([0-9a-zA-Z\.]{2,6})([0-9a-zA-z\.\-\/]+)"
Dim regExp As Object
Set regExp = CreateObject("vbscript.regexp")
With regExp
.Pattern = urlPattern
.Global = True
ActiveDocument.Range = regExp.Replace(ActiveDocument.Range, "[REDACTED]")
End With
End Sub
答案 0 :(得分:0)
我已经修改了一下并将您的模式转换为Word兼容的占位符模式,因为您需要使用Word搜索/替换而不是正则表达式引擎。
重要提示:
在Word中,占位符模式具有本地化部分,这意味着 量词可以用分号而不是逗号分隔,具体取决于 在你的语言环境中。
另请注意,问号并不意味着"可选"在Word中,而不是#34;任何类型的#1; 3#。因此,如果您的网址没有http / s简介,则需要第三种模式。
那就是说,这里应该给你一个良好的开端。请注意我在{}量词中使用分号,如果您的语言环境需要,请替换为逗号。另请注意我没有使用选择:
Dim patterns As Variant
Dim placeholder As Variant
patterns = Array("[a-zA-Z0-9.]{1,}(\@)[a-zA-Z]{1,}.[a-zA-Z0-9]{2,6}", "htt[ps]{1,2}://[0-9a-zA-Z.\-]{1,}[0-9a-zA-Z.\/\-_]{1,}", "[0-9a-zA-Z\-]{3,}.[0-9a-zA-Z.\/\-_]{3,}")
placeholder = Array("[EMAIL REMOVED]", "[URL REMOVED]", "[URL REMOVED]")
For i = 0 To 2
With ActiveDocument.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
.text = patterns(i)
.Replacement.text = placeholder(i)
.MatchWildcards = True
.Execute Replace:=wdReplaceAll
End With
Next i