gpt4 book ai didi

c# - 在 C# 中对一个段落进行正则表达式

转载 作者:行者123 更新时间:2023-11-30 20:37:38 26 4
gpt4 key购买 nike

我正在尝试创建一个正则表达式,将标题与段落匹配,然后从文本文件中匹配该段落中的所有文本。该段落可以出现在文本文件的不同部分,但设置如下:

收入确认

\n(空行)

关于收入确认的不同长度的段落

\n(空行)

我正在尝试获取标题,然后是段落。有没有办法编写一个以空行结尾的正则表达式?

我目前的情况是这样的:

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);
}
}

但这似乎不太对。

非常感谢任何帮助!

最佳答案

您可以使用以下正则表达式:

(?s)(?:^|\n)Revenue Recognition(?:\r?\n){2,}(?<par>.*?)(?:(?:\r?\n){2,}|$)

参见 regex demo

enter image description here

段落将在recrev.Groups["par"].Value , 这是一些示例代码(我添加了 outfile 变量):

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);
}

您的解决方案不起作用,因为您按行读取文件,然后检查每一行,因此,您无法将多行 block 与正则表达式匹配。当您读取文件到最后时,您可以使用 RegexOptions.Singleline (或内联版本 (?s) )以匹配整个多行 block 。使用这种方法,文件不应太长。

正则表达式分解:

  • (?s) - 启用单行模式
  • (?:^|\n) - 字符串的开头或换行符
  • Revenue Recognition - 匹配字符的文字序列
  • (?:\r?\n){2,} - 2 个或更多换行符
  • (?<par>.*?) - 持有段落的小组(0+任何字符,尽可能少,直到...)
  • (?:\r?\n){2,} - 2 个换行符。

关于c# - 在 C# 中对一个段落进行正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35856434/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com