我正在寻找一种使用正则表达式在某个字符串的下一行查找文本的方法。
说我有以下文字:
Note:
Just some text on this line
Some more text here.
我只想获得文本'这条线上的一些文字'。
我不确切知道其他文本是什么,所以我不能在'注意'和'这里有更多文字'之间搜索。
我所知道的是我想要的文字是在“注意:”的下一行。
我怎么能这样做?
干杯, CJ
答案 0 :(得分:2)
我会逐行排列你的字符串,当正则表达式匹配时,然后选择下一行
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);
答案 1 :(得分:1)
这个可以使用多行正则表达式完成,但你确定要吗?这听起来更像是逐行处理的情况。
正则表达式将是:
new Regex(@"Note:$^(?<capture>.*)$", RegexOptions.MultiLine);
虽然您可能需要先$
一个\r?$
或\s*$
,因为$
仅匹配\n
而不是\r
\r\n
。
你的“这条线上的一些文字”将出现在名为capture的组中。由于\r
的处理,您可能还需要从中删除尾随$
。
答案 2 :(得分:0)
你可以这样做
(?<=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;