正则表达式在一个句子中多次匹配特定模式
Regex to match a specific pattern multiple times within a sentence
我对由多个句子组成的乳胶文本文件有以下问题,例如
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 中 return fig:2
和 fig:3
,以及 fig:5
、fig:6
和fig:7
来自句子 ddd.
我必须在 Textmate (texteditor) 中使用正则表达式进行搜索。
您需要的是积极的前瞻性陈述。例如:
\S*(?=\s*\cref{)
注意!我不确定如何在你的文本程序中输入转义 and/or 符号,所以只是为了通过双“\”清楚我的意思是 \ char 和 \s 是 space char,\S anti space。
to return 也是无花果,你需要引入不同的组。本指南可能会帮助您:
http://www.rexegg.com/regex-lookarounds.html#compound
除了我的评论之外,您还可以想出一种递归方法。但是,查看文档,TextMate
似乎不支持递归。在这种情况下,您可以轻松地重复该模式一次(满足您对出现次数超过 一次 的句子的要求):
(?:\cref\{(fig:\d+)\})(?:[^.]+?(?:\cref\{(fig:\d+)\}))+
分解,这会查找 \cref{}
并捕获内部 fig:
+ 数字,然后查找不是点的字符 ([^.]
) 并重复第一个子模式.正如评论中已经提到的那样,您可能需要使用句子条件(例如,什么被视为句子 - 这是 [^.]
部分)。在 regex101.com.
上查看该方法的演示
我对由多个句子组成的乳胶文本文件有以下问题,例如
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 中 return fig:2
和 fig:3
,以及 fig:5
、fig:6
和fig:7
来自句子 ddd.
我必须在 Textmate (texteditor) 中使用正则表达式进行搜索。
您需要的是积极的前瞻性陈述。例如:
\S*(?=\s*\cref{)
注意!我不确定如何在你的文本程序中输入转义 and/or 符号,所以只是为了通过双“\”清楚我的意思是 \ char 和 \s 是 space char,\S anti space。 to return 也是无花果,你需要引入不同的组。本指南可能会帮助您: http://www.rexegg.com/regex-lookarounds.html#compound
除了我的评论之外,您还可以想出一种递归方法。但是,查看文档,TextMate
似乎不支持递归。在这种情况下,您可以轻松地重复该模式一次(满足您对出现次数超过 一次 的句子的要求):
(?:\cref\{(fig:\d+)\})(?:[^.]+?(?:\cref\{(fig:\d+)\}))+
分解,这会查找 \cref{}
并捕获内部 fig:
+ 数字,然后查找不是点的字符 ([^.]
) 并重复第一个子模式.正如评论中已经提到的那样,您可能需要使用句子条件(例如,什么被视为句子 - 这是 [^.]
部分)。在 regex101.com.