【问题标题】:Remove text between specific tags in Microsoft Excel删除 Microsoft Excel 中特定标记之间的文本
【发布时间】:2013-06-04 17:50:25
【问题描述】:

我有一些这样的文字:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.

我正在尝试删除每对“代码”标签之间的所有内容。我写了一个函数,当每个单元格只有一对标签时效果很好,但它不处理多个实例。这是所需的输出:

Lorem ipsum dolor sed diam nonummy nibh euismod tincidunt ut aliquam erat volutpat.

你会建议我怎么做?

【问题讨论】:

  • 您的意思是要删除“代码”标签之间的所有内容?
  • 是的,这正是我想要做的。
  • 你想要的输出是什么?请将其添加到您的帖子中。
  • 我刚刚做到了。是不是更清楚了?

标签: excel vba


【解决方案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 正则表达式 5.5”引用添加到您的 VBA 项目中。

如果您只想删除某个标签(例如 &lt;CODE&gt;&lt;/CODE&gt;),只需将代码的 re.Pattern = "&lt;[^/&gt;]+&gt;" 行替换为以下内容:

re.Pattern = "<CODE>"

【讨论】:

  • 它太复杂了,在这种情况下不需要!
【解决方案2】:

基于宏记录器:

Sub Test()
    'working for selection replacing all <*> sections
    Selection.Replace What:="<*>", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
End Sub

编辑尝试 2,在 OP 的 cmets 之后:

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

它会将文本替换为&lt;code&gt;&lt;/code&gt;,删除中间的额外空格。

【讨论】:

  • OP 也想删除包含在 HTML 标记中的文本。这不会那样做。
  • @Excelllll,你在投反对票之前试过这个吗?从Lorem ipsum dolor &lt; code&gt;sit amet 你会得到Lorem ipsum dolor sit amet- 不是吗?我(或你)缺少什么?
  • 仔细查看 OP 的预期输出。打开和关闭标签之间的所有文本也应该被删除。
  • @Excelllll,仔细看看 OP 之前和之后的样本——它们不一样。 OP只是添加不同的文字,之前和之后是不同的!
  • 你能告诉我如何修改它以便它只查找我示例中的特定标签吗?我的文本中只有我希望被宏忽略的其他标签。
【解决方案3】:

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

【讨论】:

  • OP 也希望删除 HTML 标记中包含的文本。这不会那样做。
猜你喜欢
  • 2015-12-20
  • 1970-01-01
  • 2011-10-08
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 2017-10-10
  • 1970-01-01
  • 2012-08-26
相关资源
最近更新 更多