繁体   English   中英

\\ begin {enumerate}和\\ end {enumerate}之间的正则表达式

[英]Regex between \begin{enumerate} and \end{enumerate}

所以,我有一个像

\begin{enumerate}
\item My first item 
\item My second item
\end{enumerate}

并且需要使用Regex来获得\\begin{enumerate}\\end{enumerate}之间的部分。 我尝试使用\\\\begin{enumerate}(.*?)\\\\end{enumerate}并且在在线检查器中它可以工作,但在我运行代码时不起作用。

任何想帮助我的人都将不胜感激。

您可以使用[\\s\\S]*代替.*也可以使用modifier s ,因为. 不包含\\n

var re = new Regex(@"\\begin{enumerate}([\s\S]*?)\\end{enumerate}");

您可以使用此正则表达式:

(?s)\\begin{enumerate}(.*?)\\end{enumerate}

C#:

var rgx = new Regex(@"(?s)\\begin{enumerate}(.*?)\\end{enumerate}");

模式开头的(?s)强制点与换行符匹配,并与反斜杠匹配,您需要在逐字字符串文字中将其加倍,或在常规的常规字符串文字中将其加倍。

也许,您也想强制执行不区分大小写的匹配。 然后,将(?s)替换为(?si)

在Expresso中测试:

在此处输入图片说明

我想您在这里有一个转义问题,请使用逐字字符串。 另外,大括号也应脱开。 最后,您使用了RegexOptions.Singleline从而使. 元字符可以匹配换行符?

var re = new Regex(@"\\begin\{enumerate\}(.*?)\\end\{enumerate\}", RegexOptions.Singleline);

注意@只是之前"

似乎以为您可能只想在这些标签之间使用文本,因此,在这种情况下,您可以使用正向查找和向前查找,这将使您:

\\ n \\ item我的第一项\\ n \\ item我的第二项\\结束

所以试试这个。 我为您添加了一些转义符,因此它将起作用。

(?<= \\ {开始枚举})。*?(?= \\ {端枚举})

与第二个答案一样,我可能会使用@符号代替转义字符。 我认为它看起来更容易阅读。

您总是可以使用简单的旧Linq来执行此操作。 例如:

var s = "\\begin{enumerate}\n" +
        "\\item My first item\n" +
        "\\item My second item\n" +
        "\\end{enumerate}";

var allRows = s.Split('\n').ToList();

var items = allRows
        .Skip(1)
        .Take(allRows.Count - 2)
        .Select(i => i.Replace(@"\item ", String.Empty));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM