乳胶样品如下:
$F=K$
,balalalala,balablalBi$_x$Sb$_{1-x}$
,balabla$abcd$
balabala
我想要匹配的是内联数学表达式,如$F=K$
,$abcd$
,而不是那些表达式为" _"在" $"之后,如$_x$
和$_{1-x}$
所以我写这样的正则表达式
\$[^_][^\$]+\$(?!_)
我添加了(?!_)
,因为$Sb$
中间的Bi$_x$Sb$_{1-x}$
不应被视为数学表达式。
但代码运行不正常。它返回两个表达式
$F=K$
和$,balabla $
。
这个问题的正确表达式是什么?
答案 0 :(得分:0)
你想要的匹配需要一个Lookbehind正则表达式,比如:
\$[^$]+\$(?<!\$_[^$]+)
但是我们知道里面的正则表达式无法使用+
或*
(必须是固定长度),因此上述正则表达式无效。
我建议在2遍中处理文本。在第一遍中删除任何$_xxx$
模式:
perl -ne 's/(\$_[^\$]+\$)//g;print;'
然后匹配您想要的模式:
grep -oP '\$[^$]+\$'