正则表达式从下一行获取文本

本文关键字:一行 获取 取文本 正则表达式 | 更新日期: 2023-09-27 18:05:01

我正在寻找一种方法来找到使用正则表达式的某个字符串的下一行的文本。
假设我有以下文本:

Note:
Just some text on this line
Some more text here.

我只想获得文本' just some text on this line'。
我不知道其他文本究竟是什么,所以我不能在"注释:"answers"这里还有一些文本"之间搜索。
我所知道的是,我想要的文本在'Note:'的下一行。
我怎么能这么做?

欢呼,CJ

正则表达式从下一行获取文本

我会逐行搜索你的字符串,当一个正则表达式匹配时,然后取下一行

string str;
// if you're not reading from a file, String.Split(''n'), can help you
using (StreamReader sr = new StreamReader("doc.txt"))
{
    while ((str = sr.ReadLine()) != null)
    {
        if (str.Trim() == "Note:") // you may also use a regex here if applicable
        {
            str = sr.ReadLine();
            break;
        }
    }
}
Console.WriteLine(str);

这个可以用多行正则表达式完成,但是您确定要这样做吗?这听起来更像是逐行处理。

正则表达式应该是这样的:

new Regex(@"Note:$^(?<capture>.*)$", RegexOptions.MultiLine);

尽管您可能需要将第一个$设置为'r?$'s*$,因为$只匹配'n而不是'r'n中的'r

您的"Just some text on this line"将位于名为capture的组中。由于对$的处理,您可能还需要从中去掉后面的'r

你可以这样做

(?<=Note:('r?'n)).*?(?=('r?'n)|$)
---------------- --- ------------
      |           |        |->lookahead for 'r'n or end of string
      |           |->Gotcha
      |->lookbehind for note followed by 'r'n. 'r is optional in some cases

就像这样

string nextLine=Regex.Match(input,regex,RegexOptions.Singline | RegexOptions.IgnoreCase ).Value;