首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用正则表达式匹配LaTeX保留字符

用正则表达式匹配LaTeX保留字符
EN

Stack Overflow用户
提问于 2013-08-21 15:02:26
回答 3查看 1.1K关注 0票数 3

我有一个HTML解析器,适合它应该做的事情(将HTML的片段转换为LaTeX的片段),但是填充变量有一个小问题。问题是变量应该允许包含LaTeX保留字符(即# $ % ^ & _ { } ~ \)。这些需要逃脱,这样他们就不会杀死我们的LaTeX渲染器。

处理转换和所有内容的程序都是用Python编写的,所以我试图找到一个很好的解决方案。我的第一个想法是简单地执行一个.replace(),但是只有当第一个不是\时,才允许您匹配。我的第二次尝试是一次报复,但我不幸地失败了。

我想出的标准是([^\][#\$%\^&_\{\}~\\])。我希望这将匹配任何保留字符,但前提是它前面没有\。不幸的是,这与我输入文本中的单个字符相匹配。我也在这个正则表达式上尝试过不同的变体,但是我无法让它工作。变化主要包括在正则表达式的第二部分中删除/添加斜杠。

有人能帮上忙吗?

编辑呼呼,我似乎也包括了斜杠。当我发布这篇文章时,我展示了我是多么清醒:)在我的情况下,它们不应该被逃脱,但是从答案中的regexes中删除它们相对比较容易。谢谢大家!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-21 15:12:38

[^\]是任何东西的字符类,而不是\,这就是它匹配所有东西的原因。您需要一个负面的反向断言:

代码语言:javascript
复制
((?<!\)[#\$%\^&_\{\}~\\])

只要(?<!...)不在前面,...就会匹配它后面的任何内容。您可以在python文档上查看这个

票数 4
EN

Stack Overflow用户

发布于 2013-08-21 15:18:42

regex ([^\][#\$%\^&_\{\}~\\])匹配的是在第一个[和最后一个]之间没有找到的任何东西,所以它应该匹配所有东西,除了您想要它做的事情。

在圆括号周围移动应该可以修复原来的regex ([^\\])[#\$%\^&_\{\}~\\]

我会尝试使用regex 向后看,它将与您想要转义的字符不匹配。我不是正则表达式专家,所以也许有一个更好的模式,但这应该适用于(?<!\\)[#\$%\^&_\{\}~\\]

票数 1
EN

Stack Overflow用户

发布于 2013-08-21 15:50:46

如果要查找未转义的特殊字符,而不删除带有转义反斜杠的特殊字符(例如,您确实希望匹配abc\\\def中的最后一个反斜杠),请尝试如下:

代码语言:javascript
复制
(?<!\\)(\\\\)*[#\$%\^&_\{\}~\\]

这将匹配任何特殊字符前面的偶数(这包括0)的反斜杠。它说,字符之前可以有任意数量的反斜杠,一个负面的反向斜杠说,这些反斜杠不能前面的另一个反斜杠。

比赛将包括反斜杠,但如果你把另一个在所有的前面,它将达到相同的效果,摆脱特殊的字符,无论如何。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18360976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档