C#正则表达式:查找两个字符串之间的带换行符的字符串

5

这是我的正则表达式:Regex r = new Regex("start(.*?)end", RegexOptions.Multiline);

这意味着我想要获取在"start""end"之间的内容。但问题是,在start和end之间有一个换行符或\n,而正则表达式没有返回任何内容。

那么如何让正则表达式找到\n呢?

3个回答

6

Multiline选项的名称具有误导性,正确选项Singleline也是如此:

Regex r = new Regex("start(.*?)end", RegexOptions.Singleline);

来自MSDN,RegexOptions枚举

Singleline - 指定单行模式。更改句点(.)的含义,使其匹配每个字符(而不是除\n以外的每个字符)。


+1 我们能在这里做些什么来排除起始和结束,也就是说,如果我只想获取在起始和结束之间的值。 - Thunder

2

其他人都说我应该只使用singleLine。如果我添加multiline会有影响吗? - AndroidXTr3meN
在您的情况下,无论如何都不会有任何区别,除非您在正则表达式中使用^或$。请参阅链接文档以获取所有枚举的定义。 - samjudson
如果我的输入中有多个起始...结束对,我想要获取它们所有,该怎么办?例如:start ....我想要的文本... endstart ...另一个我想要的文本... end当我使用Singleline时,点匹配CR\LF但我只得到一次匹配。 - brighty

1

使用Singleline而不是Multiline

Regex r = new Regex("start(.*?)end", RegexOptions.Singleline);

顺便说一下,RegexBuddy 是你无价的好朋友(不,我与作者没有任何联系,只是一个快乐的用户)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接