0

たくさんの大きなhtmlページからいくつかの情報を抽出するプログラムがあります。最後の行(myRegex.Match(detailPage))が実行時間の大部分を占めることがわかりました。正規表現パターンは最適化されていますか?

const string strRegex = @"prepend-top.*?<h1[^>]*?>(?<name>.+?)\s*<a.*?
    Create\ Date.*?<label>(?<create>.*?)</label>.*?
    <a.*?id\s*=\s*""period_report"".*?href\s*=\s*""(?<url>.*?)""";
const RegexOptions myRegexOptions =
            RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled |
            RegexOptions.IgnorePatternWhitespace;
var myRegex = new Regex(strRegex, myRegexOptions);
var m = myRegex.Match(detailPage);

HTMLコードは次のようになります(htmlファイルのサイズは約30Kですが、ほとんどのhtmlはjavascriptコードです)。

<div class="span-24 prepend-top">
<h1>XXX XXX XXXX 
    <a href="https://....">Back to Search Results</a></h1>
</div>

<div class="span-18">
<div class="top-content">

<script type="text/javascript">
 .....
</script>

    <div class="detailHeaderContainer">
        <div class="leftBlock">

            <div class="left staticlabel leftStaticlabelWidth inlineColumn">
                <label>
                    Product Type:
                </label>
            </div>
            <div class="left leftDynamiclabelWidth dynamiclabel">
                <label>Type 2</label>
            </div>
            <div class="clear"></div>

            <div class="left staticlabel leftStaticlabelWidth inlineColumn">
                <label>
                    Create Date:
                </label>
            </div>
            <div class="left leftDynamiclabelWidth dynamiclabel">
                <label></label>
            </div>
4

2 に答える 2

0

MSDNの正規表現のベストプラクティスガイド、BCLチームのブログのこのブログエントリをざっと見てみることをお勧めします。正規表現の動作について説明し、正規表現が遅くなる理由についてのガイダンスを提供できます。

于 2012-08-17T20:07:27.200 に答える
0

静的正規表現クラスを作成すると、時間を大幅に節約できます。

于 2012-12-21T22:49:15.117 に答える