【问题标题】:Using Regex to Parse Latex in Markdown在 Markdown 中使用 Regex 解析 Latex
【发布时间】:2019-01-21 06:45:20
【问题描述】:

在降价文件中:我希望在 VS Code 中找到 {\display 及其匹配的 }(不支持向后看)。在以下文本中:

Type-2  Context-free    Non-deterministic pushdown automaton    {\displaystyle A\rightarrow \gamma } A \rightarrow \gamma

Type-3  Regular Finite state automaton  {\displaystyle A\rightarrow {\text{a}}} {\displaystyle A\rightarrow {\text{a}}} and {\displaystyle A\rightarrow {\text{a}}B} {\displaystyle A\rightarrow {\text{a}}B}

我希望识别:

{\displaystyle A\rightarrow \gamma } {\displaystyle A\rightarrow {\text{a}}} {\displaystyle A\rightarrow {\text{a}}} {\displaystyle A\rightarrow {\text{a}}B} {\displaystyle A\rightarrow {\text{a}}B}

我认为正则表达式应该以这个{\ 开头,并且对} 是贪婪的,但不应该在匹配的} 之后包含{\

我试过(\{\\.*\}),但这并不能识别所有情况。

总结:如果它在下一次出现{\display 之前最后停止} 并且在这两者之间可以有任何字符,则答案将是最一般的。

【问题讨论】:

  • 请解释为什么投票赞成关闭?
  • 这应该适用于您给定的示例:{\\display.+?}+(\w})?
  • @Deathshadow 谢谢!如果您可以将其转换为答案并在可能的情况下进行解释,那就太好了! :)

标签: regex parsing visual-studio-code regex-greedy


【解决方案1】:

使用您给定的示例,这应该可以工作:{\\display.+?}+(\w})?

解释:

{\\display -> 查看它是否以 { 开头,后跟 \ 和单词 display

.+?}+ -> 匹配任何非贪婪字符,直到第一个 } 可以有多个

(\w}) -> 匹配后面带有} 的任何单词字符(这部分是你给出的这个例子的最后两个字符:{\displaystyle A\rightarrow {\text{a}}B} 所以它会匹配B}

希望这有帮助!

【讨论】:

  • 您的答案在这种情况下非常有效!但是是否有可能有一个更通用的正则表达式,因为如果我们有其他字符,\w 字符类会失败。最终目标是匹配latex命令的匹配花括号之间的文本。
  • 示例{\\display.+?}+(\w*})* 可以找到{\displaystyle \alpha \rightarrow \beta }dsss}sdssdd}。但不是{\displaystyle \alpha \rightarrow \beta }ds + ss}sdssdd}
  • 如果它在下一次出现 {\display 之前最后停止 } 并且在这两者之间可以有任何字符,则答案将是最一般的。
  • @Nikhil 这是真的,但最后一个将不会匹配,因为没有后续 {\display
  • 所以它应该最后停止 } 但在 {\display|\n 之前
猜你喜欢
  • 2021-06-15
  • 2010-09-25
  • 2012-04-18
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
  • 2020-06-21
  • 2010-11-29
  • 2012-09-08
相关资源
最近更新 更多