我的乳胶文本文件包含多个句子,例如
,我遇到以下问题Aaa \cref{fig:1}. Bbb \cref{fig:2} bbb \cref{fig:3}. Ccc \cref{fig:4}. Ddd \cref{fig:5} ddd \cref{fig:6} ddd \cref{fig:7}.
我需要知道的是如何隔离每个句子中的\cref{fig:xxx}
部分。问题是正则表达式应该只考虑\cref{fig:xxx}
出现一次以上(> 1)的句子。
如果正则表达式可以从句子bbb返回fig:2
和fig:3
,以及从fig:5
,fig:6
和fig:7
返回,那么效果会很好句子ddd。
我必须在Textmate(texteditor)中使用正则表达式进行搜索。
答案 0 :(得分:1)
你需要的是一个积极的前瞻性陈述。例如:
\S*(?=\s*\\cref{)
请注意!我不确定如何在文本程序中输入转义符和/或符号,所以只需要用双“\”清楚我的意思是\ char和\ s是空格char,\ S anti space。 还要返回无花果,你需要引入不同的群体。本指南可能对您有所帮助: http://www.rexegg.com/regex-lookarounds.html#compound
答案 1 :(得分:1)
除了我的评论,您还可以提出一种递归方法。但是,查看文档时,TextMate
似乎不支持递归。在这种情况下,您可以再次轻松地重复该模式(满足您对超过一个出现的句子的要求):
(?:\\cref\{(fig:\d+)\})(?:[^.]+?(?:\\cref\{(fig:\d+)\}))+
细分,这会查找\\cref{}
并捕获内部fig:
+数字,然后查找不是点([^.]
)的字符并重复第一个子模式。正如评论中已经提到的,您可能需要使用句子条件(例如,被视为句子 - 这是[^.]
部分)。请参阅regex101.com上的方法演示。