【问题标题】:Replace content of a tag using RegEx使用 RegEx 替换标签的内容
【发布时间】:2018-02-03 19:05:28
【问题描述】:

我想匹配所有以“!”结尾的单词来自这个标签:

<div>Why I love! you so much</div>

在这种情况下,我想匹配爱这个词!因为有一个!

现在,我制作了这个漂亮的正则表达式:

(?-s)(<div>)*\w+!(?!\w*;)(?=[^<]*</div>)

替换后,我的标签应该是这样的:

<div>Why I love you so much</div>

所以,我想使用这个正则表达式,在几个 .html 文件中替换所有具有! Basicaly 的标签,我想从这些标签中删除它们。我尝试更换!有一个空的空间,像这样:

搜索:(?-s)(<div>)*\w+!(?!\w*;)(?=[^<]*</div>)

替换为:\1\2(LEAVE EMPTY)

但不起作用。谁能帮帮我?

基本上,我想从多个文件中删除所有与这些标签中的单词相关的!

【问题讨论】:

  • 为您服务的语言是什么?
  • 改用这个:(?-s)(?:<div>)*\w+(!)(?!\w*;)(?=[^<]*<\/div>) 它只会捕获!,而不是<div> 部分
  • 是“!”每个标签中只包含一次还是可以不止一个?
  • 可以不止一个 :)
  • 所以 "
    Why I love! you so! much
    " 应该替换成 "
    Why I you much
    " 去掉 "love" 和 "so “??它可以是任何标签,而不仅仅是 div,对吧?

标签: html regex notepad++


【解决方案1】:

试试

(<([^>]+)>[^>]*?[ ]\w+?)\!([^>]*?<\/\2>)

替换为

\1\3

然后

This is not! in tag.

<div>Why I love! you so! much </div> This is not! in tag. <div>Why I love! you so! much </div>

这将被替换成

This is not! in tag.

<div>Why I love you so! much </div>  This is not! in tag. <div>Why I love! you so! much </div>

先删除!在&lt;div&gt; 标签中。

没有办法立即删除!来自上面示例中的 love!so! 在 Notepad++ 中,因为它只能在同一行中处理一次,所以不幸的是你必须继续替换,直到你不再找到为止。但是您可以编写 Python 脚本来执行此操作。然后单击即可完成所有文件甚至文件夹中的所有文件,因此值得编写,或者更高级的文本编辑器,如 Vim :) 如果您编写脚本,您可以指定是否要重复处理相同的内容或只需一次进入同一行/字符串,这样您就可以轻松地做更多的事情。

关于正则表达式, &lt;([^&gt;]+)&gt; 在示例中代表&lt;/div&gt;[^&gt;]+ 表示“除&gt; 之外的任何内容”。所以这可以防止&lt;AAA&gt;&lt;BBB&gt;AAA&gt;&lt;BBB 作为匹配而不是AAA,因为正则表达式会选择更长的匹配。所以&lt;([^&gt;]+)&gt;是写HTML标签的通用方式,它也可以匹配像&lt;a href=....&gt;这样的长HTML标签。

【讨论】:

  • 你好遥。它不适用于您的正则表达式。基本上,我想删除所有与thise标签中的单词相关的!。我可以搜索并找到每个单词,但我不知道如何删除那些! :)
  • 您只想删除!但不是单词??如果要删除所有 !,则必须编写脚本,因为 Notepad++ 只能在一行中处理一次。所以你必须点击替换按钮,直到没有更多!如果你不会写脚本。
  • 超级!!谢谢。请将您的最后2条回复放在Answer上,以便投票接受。
  • 和 Haruka,如果你提到它,你能做一个正则表达式来用 love ! 替换所有 love! 吗?意味着,在! 之前为标签中的所有单词添加一个空格?和 ”!”每个标签中只包含一次。
  • (&lt;([^&gt;]+)&gt;[^&gt;]*?[ ]\w+?)(\![^&gt;]*?&lt;\/\2&gt;) 然后替换为\1 \3。尝试学习 Python 脚本,你可以做更多的事情 ;)
【解决方案2】:

您可以使用纯正则表达式和单击搜索和替换按钮删除粘在单词末尾的!

(?:\G(?!^)|<div>)[^<]*?\K\b!\B

请参阅regex demo。要在单词和! 之间插入空格,只需替换为 !

模式详情

  • (?:\G(?!^)|&lt;div&gt;) - &lt;div&gt; 子字符串 (&lt;div&gt;) 或 (|) 最后一次成功匹配的结束 (\G(?!^))
  • [^&lt;]*? - 除了 &lt; 之外的任何 0+ 个字符,因为 *? 是一个惰性量词,所以尽可能少
  • \K - match reset operator 从匹配缓冲区中丢弃所有匹配的文本
  • \b - 一个单词边界(紧接在! 之前,应该有一个单词字符)
  • ! - 一个!
  • \B - 非单词边界(紧跟在! 之后,应该有非单词字符或字符串结尾)。

【讨论】:

    猜你喜欢
    • 2011-12-21
    • 1970-01-01
    • 2011-11-03
    • 2016-01-11
    • 2022-12-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    相关资源
    最近更新 更多