我正在寻找一种使用正则表达式在某个字符串的下一行查找文本的方法。
假设我有以下文字:
Note:
Just some text on this line
Some more text here.
我只想获取文本“仅此行上的一些文本”。
我不确切知道其他文本是什么,所以我无法在“注意:”和“这里还有一些文本”之间进行搜索。
我所知道的是,我想要的文本在“注意:”的下一行。
我怎么能这样做?
干杯,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);
尽管您可能需要先$
设置 a\r?$
或 a\s*$
因为$
只匹配\n
不匹配\r
in \r\n
。
您的“仅此行上的一些文本”将位于名为 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;