gpt4 book ai didi

c# - 匹配空行之间的文本 C#

转载 作者:太空宇宙 更新时间:2023-11-03 18:57:20 25 4
gpt4 key购买 nike

我有这样的文字

rrr
ttt

yyyy
zzz
cc

iii
o

我需要匹配空行之间的 block 。所以,结果应该是:

0.
rrr
ttt

1.
yyyy
zzz
cc

2.
iii
o

尝试过

var m = System.Text.RegularExpressions.Regex.Match(text, @"([a-zA-Z]+\r\n)+");

它不起作用。

最佳答案

我只是想补充一些解释:

  • Regex(@"(.+((\r\n)|$))+") 稍微短一些,也应该与您的文本 block 匹配,因为:
    • .+ 匹配除换行符以外的所有内容
    • (\r\n)|$) 匹配新行或字符串结尾
    • (.+((\r\n)|$))+ 匹配多个非空行
  • 您可以简单地使用 text.Split(new[] { "\r\n\r\n"}, StringSplitOptions.RemoveEmptyEntries)
  • 而不是拆分和重组

此外,还有关于正则表达式性能的讨论。我将 m.rogalski 的答案、正则表达式(预编译)和 string.split 解决方案与 BenchmarkDotNet 进行了比较。 ,这是一种常见的微基准解决方案。我没有将输出写入控制台,而是将其放入列表中。

以下是示例文本的基准测试结果:

BenchmarkDotNet=v0.10.1, OS=Microsoft Windows NT 6.2.9200.0
Processor=Intel(R) Pentium(R) CPU B970 2.30GHz, ProcessorCount=2
Frequency=2241012 Hz, Resolution=446.2270 ns, Timer=TSC
[Host] : Clr 4.0.30319.42000, 32bit LegacyJIT-v4.6.1586.0
DefaultJob : Clr 4.0.30319.42000, 32bit LegacyJIT-v4.6.1586.0

Method | Mean | StdDev | Gen 0 | Allocated |
---------------- |---------- |---------- |------- |---------- |
TestRegExp | 5.1306 us | 0.0402 us | 1.1607 | 1.41 kB |
TestLists | 1.1866 us | 0.0106 us | 0.3395 | 408 B |
TestStringSplit | 1.3574 us | 0.0103 us | 0.6971 | 784 B |

我们能观察到什么?

  • regexp 慢五倍,需要十倍的内存
  • 字符串拆分需要更多内存,因为它会复制字符串
  • 最有效的解决方案是使用 stringreader 实现

关于c# - 匹配空行之间的文本 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41904907/

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