在HTML文档中工作时,我想查找并替换所有&lt;或者&gt;符号与&amp; gt;或&amp; lt;。是否有任何方法可以轻松地替换内容中的实例,例如在<p>
标记中,但不能更改&lt; <html>
<head>
</head>
<body>
<p>I want to convert these characters: < ></p>
<ul>
<li>
Greater than: >
</li>
<li>
Less than: <
</li>
<li>Images: <img src="test.jpg"><br><img src="test.jpg"></li>
</ul>
</body>
</html>
标记。和&gt;包装标签?
编辑:以下是一个简单的例子。在格式化某人的工作(有时是多段技术写作)和格式化HTML时,我通常会使用此功能。我希望能够将小于号和大于号的符号转换为HTML代码,而不会弄乱页面的HTML标记:
{{1}}
答案 0 :(得分:1)
我建议在搜索/替换中使用Sublime的Regex模式,并使用lookahead / lookbehind断言来完成你想要的。我将尝试编写一个示例正则表达式并在完成后立即更新答案,但这应该让您开始探索如何实现目标。
<强>更新强>
这应该可以帮助您查找不属于普通HTML / XML标记的<
的所有实例。在启用了正则表达式模式的情况下在搜索字段中输入<(?!/?\w+>)
会导致它锁定到任何不符合XML / HTML标记规则的<
。
>
将更难,即使可能使用该方法,因为lookbehinds不允许可变长度匹配。解决方案可能是使用第一个正则表达式将<
替换为文档中未使用的某些字符或字符组合,使用另一个正则表达式来交换>
,然后交换替换初始值的字符<
。我也考虑到了这一点。
另一个更新: 这是我要采取的方法。它需要多个步骤,但很简单:
(?:<)(\w+)([^<>]*?)(?:>)(.*)(?:<)(/\1)(?:>)
并替换为@@$1$2@@$3@@$4@@
以重新格式化代码对,以保护他们免受后续步骤的影响。(?:<)(\w+)([^<>]*?/)(?:>)
并替换为@@$1$2@@
。这将处理像<br/>
这样的自终止标记。如果你有<
并替换为||
>
并替换为<
||
并替换为>
(?:\@\@)(.+?)(?:\@\@)
并替换为<$1>
以恢复标记。当然,您可以将@@
和||
替换为您喜欢的任何内容,只要它们不相同且不会出现在文档的其他位置。只有当您的html符合XHTML标准时,此方法才有效,特别是所有标记必须包含结束标记,并且<img>
和<br>
等单个标记必须自动关闭,例如<img/>
和{ {1}}