我需要从我的latex文件中提取所有索引。但是一些指数可能看起来像这样
\ {指数* 3 * SQRT * uppersqrt {\ HSPACE {-2.5pt} $ \ uppersqrt {\; \; \;} $(上 平方根)}}
所以我需要以某种方式计算当前打开的花括号的正则表达式数。我不知道如何处理这种情况。
此外,如果索引包含/
,那么我不需要这样的索引。
示例:
Anything before. \index{{}{}}\index{Hi}\anothertag{something}
\index{}{}
\index{/}
预期结果是
\index{{}{}}
\index{Hi}
\index{}
答案 0 :(得分:0)
可以打开数量有限的括号吗? 正则表达式
\\index{(?:[^{]|(?:{(?:[^{]|(?:{[^{]*}))*}))*}
最多匹配3个括号,例如:\ index {{{}} {{}}}
答案 1 :(得分:0)
正则表达式:
\\index({(?(?!{|})[^\/{}]*|(?1))*})
说明:
\\index # Match `\index` literally
( # Start of capturing group (1)
{ # Match opening brace `{`
(? # Start of conditional statement
(?!{|}) # If very next immediate character is not `{` or `}`
[^\/{}]* # Anything except these characters
| # Else
(?1) # Recurs capturing group (1)
)* # End of conditional - repeat conditional zero or more times - greedily.
} # Match closing brace `}`
) # End of capturing group (1)
用法:
grep -Po "\\index({(?(?!{|})[^\/{}]*|(?1))*})" input_file.txt
根据OP提供的输入输出:
\index{{}{}}
\index{Hi}
\index{}