HTML 转义 - 正则表达式?

标签 html regex string escaping

我想自动且合乎逻辑地对特定短语进行 HTML 转义,该短语当前是用引号突出显示的单词的语句。在声明中,引号或英寸标记也可以用来描述距离。

短语可以是:

Paul said "It missed us by about a foot". In fact it was only about 9".

为了逃避这句话It should really be

<pre>Paul said &ldquo;It missed us by about a foot&rdquo;.  
In fact it was only about 9&prime;.</pre>

哪个给

<pre>Paul said “It missed us by about a foot”. 
     In fact it was only about 9″.</pre>

我想不出要在 "转义符中添加的示例短语,但它可能在那里!

我正在寻找一些帮助,以了解如何在运行时确定用哪些转义值替换 "字符。该短语只是一个例子,它可以是任何东西,但应该正确形成,即开头和结尾的引号会如果我们要正确转义文本,请在场。

我是否会使用正则表达式在文本中查找带引号的短语,即句号前的两个“”字符,然后替换第一个,然后替换第二个。与

&ldquo;

然后

&rdquo;    

如果我找到一个 "将其替换为 "
除非它在我用

替换它的数字之后
&Prime;

我将如何处理一个句子中的多个引号?

"It just missed" Paul said "by a foot".  

This would really stump me.....

<pre>"It just missed" Paul said "by 9" almost".</pre>

如果正确转义,上面的内容应该是正确的。 (这次我展示的是真实人物)

“It just missed” Paul said “by 9″ almost”.

显然是一种边缘情况,但我想知道是否有可能在运行时在不了解内容的情况下逃避这种情况?如果对更明显的短语没有帮助,我们将不胜感激。

最佳答案

我会分两次完成:

第一遍搜索前面紧跟数字的任何 "s 并进行替换:

s/([0-9])"/\1″/g

根据您正在处理的文本,您可能希望/需要扩展此正则表达式以识别拼写为单词的数字;为了简单起见,我只检查了数字。

在处理完所有这些之后,第二遍可以轻松地转换成对的 ",正如您所描述的那样:

s/"([^"]*)"/“\1”/g

请注意使用 [^"]* 而不是 .* - 我们想要找到两组具有任意数量的非 双引号它们之间有双引号字符。通过添加该限制,处理具有多个引号部分的字符串不会有任何问题。(这也可以使用非贪婪的 .*?,但否定字符类更清楚地表明您的意图,并且在大多数正则表达式实现中,效率更高。)

当然,字符串中某处的偏离、不匹配的 ",或第一次传递时遗漏的英寸标记,仍然会导致问题,但如果不理解内容,就无法避免这种可能性。

关于HTML 转义 - 正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/824274/

相关文章:

html - 内容 div 中的填充问题

html - 绝对位置是否使该元素成为包含 block ?

C# 使用 RegEx 和字典替换 "Whole words only"

c - 为什么函数必须返回 char * 而不是 char 数组?

html - 悬停时为 HTML 表格边框着色

javascript - 使用格式化程序绑定(bind)编辑图标时,Angular8(制表符)中未触发 onclick 事件

regex - Emacs:replace-regexp 替换不改变大小写

java - 正则表达式与空格/非数字/单词边界匹配解释

string - 冲突字符串编程竞赛

python - 如何使用 python 2.7 替换字符串中的当前单词?