正则表达式匹配方程式中的文本,但忽略Latex命令

时间:2019-06-10 10:16:31

标签: regex string latex

我正在尝试匹配数学方程式中的任何内容,但忽略了Latex命令。到目前为止,我已经提出了以下表达式:

(?<!\\)\b([a-zA-Z0-9.,]+)

我拥有的字符串:

200\% Depreciation\ (Year_2) = $610,500\times\frac{blah}{12}\times0.2

但是我的表达式在结尾处与0.2不匹配,在2中也与Year_2不匹配。我还有其他类似问题的复杂方程式。

我认为问题是边界\b一词,但我没有其他更好的选择。不幸的是,我发现我不能在负向后的内部使用量词。所以我做不到

(?<!\\[a-z]+)([a-zA-Z0-9.,]+)

基本上我想匹配以下所有内容:

  • 数字(包括$%,.
  • 句子,单词,字符甚至空格

,而忽略格式为\foo的Latex命令以及特殊字符,例如^_=+-和括号。

一个完美的表达将匹配:

200\% Depreciation\Year _ 2)= $610,500 \ times \ frac {blah} {12} \ times {{1 }}

非常感谢!

2 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式:

(?<!\\)(?<![a-zA-Z])[a-zA-Z]+\\?|\$?[0-9]{1,3}(\,?[0-9]{1,3})*(\.[0-9]+)?(\\[%])?

更长一些,因为它会检查数字的格式是否正确。

See explanation on regex101...

答案 1 :(得分:1)

您可以使用此:

\\[a-z]+(*SKIP)(*F)|[a-zA-Z0-9.,$% ]+

说明:

\\[a-z]+            # a backslash followed by 1 or more alpha
(*SKIP)(*F)         # skip & forget previous match
|                   # OR
[a-zA-Z0-9.,$% ]+   # 1 or more any of these characters.

Demo