C# 正则表达式C中的一段#
我试图创建一个正则表达式,将标题与段落相匹配,然后将段落中的所有文本与文本文件相匹配。此段落可以出现在文本文件的不同部分,但设置如下: 收入确认 \n(空行) 关于收入确认的变长段落 \n(空行) 我想知道标题,然后是段落。有没有办法写一个以空行结尾的正则表达式 到目前为止,我得到的是:C# 正则表达式C中的一段#,c#,.net,regex,C#,.net,Regex,我试图创建一个正则表达式,将标题与段落相匹配,然后将段落中的所有文本与文本文件相匹配。此段落可以出现在文本文件的不同部分,但设置如下: 收入确认 \n(空行) 关于收入确认的变长段落 \n(空行) 我想知道标题,然后是段落。有没有办法写一个以空行结尾的正则表达式 到目前为止,我得到的是: Regex regRev_Rec = new Regex(@"Revenue Recognition(?s).*\n\n(?s).*"); string[] lines = File.ReadAllLines(
Regex regRev_Rec = new Regex(@"Revenue Recognition(?s).*\n\n(?s).*");
string[] lines = File.ReadAllLines(fileName);
foreach (string line in lines)
{
foreach (Match recrev in regRev_Rec.Matches(line))
{
outputFile.WriteLine(recrev);
}
}
但这似乎并不正确
非常感谢您的帮助
\A.*
在这里找到它:
\A表示匹配必须从字符串的开头开始。
(.)通配符表示除换行符(\n)以外的任何字符。
星号表示您找到的前面的所有字符,表示(.)通配符
您也可以使用:^*
是Regex帮助的链接。好吧,我建议您尝试以下代码片段
try
{
var text = File.ReadAllText(fileName);
var regexObj = new Regex("(?<title>Revenue Recognition)(?:(?:\r?\n){2})(?<paragraph>^.*?(?:(?:\r?\n){2}))",
RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Multiline);
var match = regexObj.Match(text);
if (match.Success)
{
var title = match.Groups["title"].Value;
var paragraph = match.Groups["paragraph"].Value;
Console.WriteLine("Title:\n" + title);
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Paragraph:\n" + paragraph.Trim());
}
}
catch (ArgumentException ex)
{
}
您可以使用以下正则表达式:
(?s)(?:^|\n)Revenue Recognition(?:\r?\n){2,}(?<par>.*?)(?:(?:\r?\n){2,}|$)
您的解决方案不起作用,因为您逐行读取文件,然后检查每一行,因此无法将多行块与正则表达式匹配。当您将文件读到底时,可以使用RegexOptions.Singleline
(或内联版本(?s)
)来匹配整个多行块。使用这种方法,文件不应该很长
正则表达式细分:
-启用单线模式(?s)
-字符串的开头或换行符(?:^ |\n)
-匹配字符的文字顺序收入确认
-2个或更多换行符(?:\r?\n){2,}
-包含段落的组(0+任何字符,尽可能少到…)(?*?)
-2换行符(?:\r?\n){2,}
@(?m-s)^收入确认。*(?:\r\n.*){0,50}“
(?s)(?:^|\n)Revenue Recognition(?:\r?\n){2,}(?<par>.*?)(?:(?:\r?\n){2,}|$)
string file_contents = string.Empty;
using (StreamWriter outputFile = new StreamWriter(outfile, false, Encoding.UTF8))
{
using (StreamReader sr = new StreamReader(fileName))
{
file_contents = sr.ReadToEnd();
}
foreach (Match recrev in Regex.Matches(file_contents, @"(?s)(?:^|\n)Revenue Recognition(?:\r?\n){2,}(?<par>.*?)(?:(?:\r?\n){2,}|$)"))
outputFile.WriteLine(recrev);
}