乳胶样本如下:
$F=K$
,balalalala, balabalaBi$_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 '$[^$]+$'