如何在这个latex示例中使用lookaround正则表达式



乳胶样本如下:

$F=K$,balalalala, balabala Bi$_x$Sb$_{1-x}$,balabla $abcd$ balabala

我想匹配的是内联数学表达式,如$F=K$, $abcd$,而不是那些在"$"后带"_"的表达式,如$_x$$_{1-x}$

所以我写这样的正则表达式

$[^_][^$]+$(?!_)

我添加(?!_),因为$Sb$Bi$_x$Sb$_{1-x}$中间不应该被视为数学表达式。

但是代码不能正常工作。它返回两个表达式$F=K$$,balabla $

这个问题的正确正则表达式是什么?

您想要的匹配需要一个Lookbehind正则表达式,类似于:

$[^$]+$(?<!$_[^$]+)

但是我们知道里面的regex不能使用+*(必须是固定长度),所以上面的regex是无效的。

我建议分两步处理文本。第一次删除任何$_xxx$图案:

perl -ne 's/($_[^$]+$)//g;print;'

,然后匹配你想要的模式:

grep -oP '$[^$]+$'

最新更新