使用RegEx替换标记的内容

时间:2018-02-03 19:05:29

标签: html regex notepad++

我希望将所有以“!”结尾的单词与此标记匹配:

<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)

但是不起作用。任何人都可以帮助我吗?

基本上,我想从几个文件中删除所有粘贴在这些标签中的单词的!

2 个答案:

答案 0 :(得分: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>

首先删除!在<div>标记中。

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

关于正则表达式, <([^>]+)>代表示例中的</div>[^>]+表示“>以外的任何内容”。因此,这会阻止<AAA><BBB>获取AAA><BBB作为匹配AAA,因为正则表达式会选择更长的匹配。因此,<([^>]+)>是编写HTML标记的一般方法,它也可以与<a href=....>之类的长HTML标记匹配。

答案 1 :(得分:1)

您可以使用纯正则表达式删除粘贴到单词结尾的!,然后单击一下搜索和替换按钮:

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

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

模式详情

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