我有一个HTML解析器,适合它应该做的事情(将HTML的片段转换为LaTeX的片段),但是填充变量有一个小问题。问题是变量应该允许包含LaTeX保留字符(即# $ % ^ & _ { } ~ \)。这些需要逃脱,这样他们就不会杀死我们的LaTeX渲染器。
处理转换和所有内容的程序都是用Python编写的,所以我试图找到一个很好的解决方案。我的第一个想法是简单地执行一个.replace(),但是只有当第一个不是\时,才允许您匹配。我的第二次尝试是一次报复,但我不幸地失败了。
我想出的标准是([^\][#\$%\^&_\{\}~\\])。我希望这将匹配任何保留字符,但前提是它前面没有\。不幸的是,这与我输入文本中的单个字符相匹配。我也在这个正则表达式上尝试过不同的变体,但是我无法让它工作。变化主要包括在正则表达式的第二部分中删除/添加斜杠。
有人能帮上忙吗?
编辑呼呼,我似乎也包括了斜杠。当我发布这篇文章时,我展示了我是多么清醒:)在我的情况下,它们不应该被逃脱,但是从答案中的regexes中删除它们相对比较容易。谢谢大家!
发布于 2013-08-21 15:12:38
[^\]是任何东西的字符类,而不是\,这就是它匹配所有东西的原因。您需要一个负面的反向断言:
((?<!\)[#\$%\^&_\{\}~\\])只要(?<!...)不在前面,...就会匹配它后面的任何内容。您可以在python文档上查看这个
发布于 2013-08-21 15:18:42
regex ([^\][#\$%\^&_\{\}~\\])匹配的是在第一个[和最后一个]之间没有找到的任何东西,所以它应该匹配所有东西,除了您想要它做的事情。
在圆括号周围移动应该可以修复原来的regex ([^\\])[#\$%\^&_\{\}~\\]。
我会尝试使用regex 向后看,它将与您想要转义的字符不匹配。我不是正则表达式专家,所以也许有一个更好的模式,但这应该适用于(?<!\\)[#\$%\^&_\{\}~\\]。
发布于 2013-08-21 15:50:46
如果要查找未转义的特殊字符,而不删除带有转义反斜杠的特殊字符(例如,您确实希望匹配abc\\\def中的最后一个反斜杠),请尝试如下:
(?<!\\)(\\\\)*[#\$%\^&_\{\}~\\]这将匹配任何特殊字符前面的偶数(这包括0)的反斜杠。它说,字符之前可以有任意数量的反斜杠,一个负面的反向斜杠说,这些反斜杠不能前面的另一个反斜杠。
比赛将包括反斜杠,但如果你把另一个在所有的前面,它将达到相同的效果,摆脱特殊的字符,无论如何。
https://stackoverflow.com/questions/18360976
复制相似问题