1

我正在使用 Visual Studio,我想删除代码中所有表单中的图标。图标嵌入在 resx 文件中,因此我使用以下正则表达式查找图标,然后使用查找和替换:

\<data name=\"\$this\.Icon\".+\n(.*\n)*^.+rEE=\n(.*\n)(.*\n)

该图标出现在 resX 文件中,代码如下:

      <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>
           AAABAAgAICAQAAEABADoAgAAhgAAABAQEAABAAQAKAEAAG4DAAAwMAAAAQAIAKgOAACWBAAAICAAAAEA
           ...
           rEGAAaxBgAGsQYABrEHAAaxBwAOsQeAHrEHgH6xB+D+sQf//rEE=
        </value>
      </data>

它有效,但性能非常糟糕。如何找到更快的正则表达式?

4

1 回答 1

2

描述

该表达式将:

  • 查找具有属性的数据标签name=$this.icon
  • 避免使用正则表达式读取非常规标记语言的一些棘手问题

<data\b(?=\s)(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\sname="\$this\.Icon")(?:[^>=]|='[^']*'|="[^"]*"|=[^'"\s]*)*"\s?\/?>(?:(?!<\/data>)[\s\S])*?<\/data>

在此处输入图像描述

例子

现场示例:http ://www.rubular.com/r/FqdOI8H27X

示例文本

注意第一个数据标签有一些困难的边缘情况

<data onmouseover=' name="$this.Icon" ; funReplace("</data>", name) ; ' type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>
           AAABAAgAICAQAAEABADoAgAAhgAAABAQEAABAAQAKAEAAG4DAAAwMAAAAQAIAKgOAACWBAAAICAAAAEA
           ...
           rEGAAaxBgAGsQYABrEHAAaxBwAOsQeAHrEHgH6xB+D+sQf//rEE=
        </value>
      </data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>
           AAABAAgAICAQAAEABADoAgAAhgAAABAQEAABAAQAKAEAAG4DAAAwMAAAAQAIAKgOAACWBAAAICAAAAEA
           ...
           rEGAAaxBgAGsQYABrEHAAaxBwAOsQeAHrEHgH6xB+D+sQf//rEE=
        </value>
      </data>

火柴

[0] => <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
       AAABAAgAICAQAAEABADoAgAAhgAAABAQEAABAAQAKAEAAG4DAAAwMAAAAQAIAKgOAACWBAAAICAAAAEA
       ...
       rEGAAaxBgAGsQYABrEHAAaxBwAOsQeAHrEHgH6xB+D+sQf//rEE=
    </value>
  </data>
于 2013-07-17T21:10:57.140 回答