[英]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.