我有一些类似的文字:
Lorem ipsum dolor< code> sit amet,consectetuer adipiscing elit,< / code> sed diam nonummy nibh euismod tincidunt ut< code> laoreet dolore magna< / code> aliquam erat volutpat。
我正在尝试删除每对“代码”标记之间的所有内容。我编写了一个函数,当每个单元格只有一对标签时效果很好,但它不会处理多个实例。这是所需的输出:
Lorem ipsum dolor< code>< / code> sed diam nonummy nibh euismod tincidunt ut< code>< / code> aliquam erat volutpat。
你怎么建议我这样做?
答案 0 :(得分:1)
此VBA函数可用于去除打开和关闭HTML标记及其包含的内容。它使用正则表达式,在这种有限的用法中应该没问题(但是beware using regex to parse HTML)。
Function stripEnclosed(strIn As String) As String
Dim re As VBScript_RegExp_55.RegExp, AllMatches As VBScript_RegExp_55.MatchCollection, M As VBScript_RegExp_55.Match
Dim closeIndex As Long
tmpstr = strIn
Set re = New VBScript_RegExp_55.RegExp
re.Global = True
re.Pattern = "<[^/>]+>"
Set AllMatches = re.Execute(tmpstr)
For Each M In AllMatches
closeIndex = InStr(tmpstr, Replace(M.Value, "<", "</"))
If closeIndex <> 0 Then tmpstr = Left(tmpstr, InStr(tmpstr, M.Value) - 1) & Mid(tmpstr, closeIndex + Len(M.Value) + 1)
Next M
stripEnclosed = tmpstr
End Function
注意:您必须将“Microsoft VBScript Regular Expressions 5.5”引用添加到您的VBA项目中。
如果您只想删除某个标记(例如<CODE>
和</CODE>
),只需使用以下内容替换代码的re.Pattern = "<[^/>]+>"
行:
re.Pattern = "<CODE>"
答案 1 :(得分:0)
基于宏录像机:
Sub Test()
'working for selection replacing all <*> sections
Selection.Replace What:="<*>", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub
在OP发表评论后编辑尝试2:
Sub Attempt_second()
'working for selection replacing all <*> sections
Selection.Replace What:="<*code>*<*/*code>", Replacement:="<code></code>", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub
它会将文本替换为<code></code>
,删除其间的其他空格。
答案 2 :(得分:0)
KazJaw 的答案简单,优雅,似乎可以满足您的需求。
我采取了完全不同的方法:
Public Function StripHTML(str As String) As String
Dim RegEx As Object
Set RegEx = CreateObject("vbscript.regexp")
With RegEx
.Global = True
.IgnoreCase = True
.MultiLine = True
.Pattern = "<[^>]+>"
End With
StripHTML = RegEx.Replace(str, "")
Set RegEx = Nothing
End Function