正则表达式删除除匹配项之外的所有内容

Regex remove everything except the match

我有一个 .ahk,它给我如下所示的内容。我只想保留包含 style 的 HTML 标签内的内容。

在下面的示例中,我只想保留 <b style="color: rgb(34, 34, 34)>;"><span>A text </span></b> 并删除前后的所有内容。

这个正则表达式匹配我想要的:(<[b div span p] style=".*">.*<\/.*[div span p b]>)但我不能只保留这个匹配并删除其他所有内容。

我试过用 $2 和 \2 替换,但没用

匹配:

([.\r\n]*)(<[b div span p] style=".*">.*<\/.*[div span p b]>)([.\r\n]*)

第一组应该匹配从头到尾的所有内容,第三组应该匹配从头到尾的所有内容。 那我只能保留第二组了。

替换为:


这是我的尝试:https://regex101.com/r/Bkq0JE/2

---------------------------
ahk html clipboard.ahk
---------------------------
Version:0.9

StartHTML:0000000159

EndHTML:0000002912

StartFragment:0000000195

EndFragment:0000002876

SourceURL:https://en.wikipedia.org/wiki/Genghis_Khan

<html>

<body>

<!--StartFragment--><b style="color: rgb(34, 34, 34)>;"><span>A text </span></b><!--EndFragment-->

</body>

</html>
---------------------------
OK   
---------------------------

你可以使用这个:

查找:.*<!--StartFragment-->(.*)<!--EndFragment-->.*
替换:</code><br> 修饰符:<code>gs

参见 regex101.com

请注意,s 修饰符使 . 也匹配换行符。如果你碰巧使用notepad++,那么可以用复选框设置那个选项。

你用的是记事本++吗?如果是这样,只需点击 Ctrl + H 然后执行以下操作:

  • 查找内容:.*(<b\s[^>]*>.*<\/b>).*
  • 替换为:</code></li> <li>搜索模式:<code>Regular Expressions
  • 勾选"Matches newlines"
  • 单击 "Replace" 并完成