提高大字符串上的正则表达式的性能

埃利亚诺拉

我目前在代码中使用正则表达式,以便从富文本文档中获取大字符串。正则表达式查找任何嵌入的图像并将其解析为字节数组,我可以将其转换为LinkedResource。我需要将RTF从应用程序中的RichTextBox转换为有效的HTML文档,然后转换为可以自动发送的MIME编码的消息。

正则表达式的问题是图像的字符串部分很大,因此我觉得正则表达式试图匹配整个字符串中的许多可能性,而实际上,我只需要查看开头和结尾。本节的结尾。下面的正则表达式包含在较大的正则表达式中,作为可选子句,例如someRegexStringA + "|" + imageRegexString + "|" + "someRegexStringB"

我该怎么做才能确保对大字符串进行较少的检查,以使我的应用程序在解析大量图像数据时不会冻结?

// The Regex itself
private static string imageRegexString = @"(?<imageCheck>\\pict)"                  // Look for the opening image tag
                                       + @"(?:\\picwgoal(?<widthNumber>[0-9]+))"   // Read the size of the image's width
                                       + @"(?:\\pichgoal(?<heightNumber>[0-9]+))"  // Read the size of the image's height
                                       + @"(?:\\pngblip(\r|\n))"                   // The image is the newline after this portion of the opening tag and information
                                       + @"(?<imageData>(.|\r|\n)+?)"              // Read the bitmap
                                       + @"(?:}+)";                                // Look for closing braces

// The expression is compiled so it doesn't take as much time during runtime
private static Regex myRegularExpression = new Regex(imageRegexString, RegexOptions.Compiled);

// Iterate through each image in the document
foreach(Match image in myRegularExpression.Matches(myDocument))
{
    // Read the image height and width
    int imageWidth = int.Parse(image.Groups["widthNumber"].Value);
    int imageHeight = int.Parse(image.Groups["heightNumber"].Value);

    // Process the image
    ProcessImageData(image.Groups["imageData"].Value);
}
科比

首先,我模糊地记得有一个带有Rich Text Editor的InfoPath表单,该表单可以导出为HTML-所以您可能要看一下(尽管我们仍然必须分别附加图像)

至于您的模式:这很简单,只有一条可疑行:

(?<imageData>(.|\r|\n)+?)

这有几个潜在的问题:

  • +?是懒惰的,长字符串会导致大量回溯,这可能会导致效率低下。
  • .|\r|\n也似乎效率很低。您可以使用SingleLine修饰符(或inline(?s:...))。
    顺便说一句,.已经匹配\r
  • (.|\r|\n)-这是一个捕获组,与(?:...)您在其他地方使用不同我怀疑这正在杀死您-在.Net中,每个字符都以Capture形式保存在堆栈中你不要那样

为了安全起见,我建议与所有格小组一起这样做:

(?<imageData>(?>[^}]+))

当然,由于其他变化,模式也可能变慢:someRegexStringAsomeRegexStringB

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Python大字符串上缩放正则表达式

来自分类Dev

大字符串正则表达式替换C#中的性能

来自分类Dev

正则表达式replaceAll在字符串上

来自分类Dev

Python正则表达式在字符串上停止

来自分类Dev

正则表达式replaceAll在字符串上

来自分类Dev

字符串上的perl正则表达式数字

来自分类Dev

Unicode字符串上的正则表达式

来自分类Dev

Python正则表达式在字符串上停止

来自分类Dev

长字符串上的Java正则表达式(字符串缓冲区)

来自分类Dev

长字符串上的Java正则表达式(字符串缓冲区)

来自分类Dev

避免在字符括起来的子字符串上使用正则表达式

来自分类Dev

正则表达式在连字符字符串上?C#

来自分类Dev

提高语法匹配正则表达式的性能

来自分类Dev

提高C ++正则表达式替换性能

来自分类Dev

如何提高Java的正则表达式性能

来自分类Dev

如何提高正则表达式的性能?

来自分类Dev

如何加快使用大正则表达式扫描大字符串的速度?

来自分类Dev

无法理解此正则表达式如何在输入字符串上运行?

来自分类Dev

在python中:如何在“圆形”字符串上执行正则表达式搜索

来自分类Dev

简单的正则表达式不在多维JSON字符串上

来自分类Dev

带有转义单引号的单引号字符串上的Python正则表达式

来自分类Dev

在匹配的子字符串上应用正则表达式

来自分类Dev

在字符串上运行多个正则表达式模式

来自分类Dev

CSS3转换字符串上的正则表达式(Regex)

来自分类Dev

不同长度字符串上的正则表达式模式

来自分类Dev

Bash在字符串上使用带有后向模式的匹配正则表达式

来自分类Dev

在字符串上带有replaceAll的Java正则表达式

来自分类Dev

在匹配的子字符串上应用正则表达式

来自分类Dev

什么是正则表达式,可以匹配特定字符串上方的所有内容?

Related 相关文章

  1. 1

    在Python大字符串上缩放正则表达式

  2. 2

    大字符串正则表达式替换C#中的性能

  3. 3

    正则表达式replaceAll在字符串上

  4. 4

    Python正则表达式在字符串上停止

  5. 5

    正则表达式replaceAll在字符串上

  6. 6

    字符串上的perl正则表达式数字

  7. 7

    Unicode字符串上的正则表达式

  8. 8

    Python正则表达式在字符串上停止

  9. 9

    长字符串上的Java正则表达式(字符串缓冲区)

  10. 10

    长字符串上的Java正则表达式(字符串缓冲区)

  11. 11

    避免在字符括起来的子字符串上使用正则表达式

  12. 12

    正则表达式在连字符字符串上?C#

  13. 13

    提高语法匹配正则表达式的性能

  14. 14

    提高C ++正则表达式替换性能

  15. 15

    如何提高Java的正则表达式性能

  16. 16

    如何提高正则表达式的性能?

  17. 17

    如何加快使用大正则表达式扫描大字符串的速度?

  18. 18

    无法理解此正则表达式如何在输入字符串上运行?

  19. 19

    在python中:如何在“圆形”字符串上执行正则表达式搜索

  20. 20

    简单的正则表达式不在多维JSON字符串上

  21. 21

    带有转义单引号的单引号字符串上的Python正则表达式

  22. 22

    在匹配的子字符串上应用正则表达式

  23. 23

    在字符串上运行多个正则表达式模式

  24. 24

    CSS3转换字符串上的正则表达式(Regex)

  25. 25

    不同长度字符串上的正则表达式模式

  26. 26

    Bash在字符串上使用带有后向模式的匹配正则表达式

  27. 27

    在字符串上带有replaceAll的Java正则表达式

  28. 28

    在匹配的子字符串上应用正则表达式

  29. 29

    什么是正则表达式,可以匹配特定字符串上方的所有内容?

热门标签

归档