首页 文章

使用RegEx替换标记的内容

提问于
浏览
2

我想匹配所有以此标记结尾的单词“!”:

<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 回答

  • 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> 标签中 .

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

    关于正则表达式, <([^>]+)> 在示例中表示 </div>[^>]+ 表示“除 > 之外的任何内容” . 所以这可以防止 <AAA><BBB> 得到 AAA><BBB 而不是 AAA 因为正则表达式会选择更长的匹配 . 所以 <([^>]+)> 是编写HTML标记的一般方法,它也可以匹配像 <a href=....> 这样的长HTML标记 .

  • 1

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

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

    regex demo . 要在单词和 ! 之间插入空格,只需用 ! 替换即可 .

    Pattern details

    • (?:\G(?!^)|<div>) - <div> substring( <div> )或( | )上次成功匹配的结束( \G(?!^)

    • [^<]*? - 除了 < 之外的任何0个字符,尽可能少,因为 *? 是一个惰性量词

    • \K - match reset operator丢弃与匹配缓冲区匹配的所有文本

    • \b - 一个单词边界(紧靠 ! 之前,应该有一个单词char)

    • ! - !

    • \B - 非字边界(紧跟在 ! 之后,应该有一个非字的字符串或字符串的结尾) .

相关问题