0

我有从谷歌广告生成的这个脚本:

        <!-- HomePage_468x60 -->
        <div id='div-gpt-ad-1383121038726-0' style='width:468px; height:60px;'>
        <script type='text/javascript'>
        googletag.cmd.push(function() { googletag.display('div-gpt-ad-1383121038726-0'); });
        </script>
        </div>

我正在尝试为我提取一些相关数据,例如广告名称、广告尺寸和广告 ID(这样我就可以呈现 head 标签的脚本)。

尝试使用像这样的一些正则表达式:

public static String GetTextBetween(string source, string leftWord, string rightWord)
{

    return
        Regex.Match(source, String.Format(@"{0}\s(?<words>[\w\s.:]+)\s{1}", leftWord, rightWord),
                    RegexOptions.IgnoreCase).Groups["words"].Value;
}

我向函数发送脚本和左词和右词,例如为了让广告名称发送错误:

GetTextBetween(ad, "<!-- ", " -->");

但它返回一个空字符串。

谁能帮帮我吗?或者有人有更好的方法吗?

编辑

我想我会为每场比赛使用一个单独的正则表达式,但是我找不到div-gpt-ad-1383121038726-0 从字符串中获取这个字符串的正确表达式,有人可以帮忙吗?

4

1 回答 1

1

如果您要使用正则表达式,我不会使用辅助“GetTextBetween”函数。我会在每种情况下只写一个正则表达式。但是,如果你想使用它,那么特殊字符会出现一些问题(因为对于 leftString 和 rightString,你想准确地找到它们并且其中没有任何特殊符号被视为正则表达式的一部分。)leftWord 和rightWord 需要为正则表达式转义一些字符。我使用这样的东西:

  private static string EscapeCharsForRegularExpression( string s )
  {
     //note that we must replace the \ first, because the following statements add backslashes
     return s.Replace( "\\", "\\\\" ).Replace( ".", "\\." ).Replace( "(", "\\(" ).Replace( ")", "\\)" ).Replace( "<", "\\<" ).Replace( "[", "\\[" ).Replace( "]", "\\]" ).Replace( ">", "\\>" ).Replace( "{", "\\{" ).Replace( "}", "\\}" ).Replace( "*", "\\*" ).Replace( "^", "\\^" ).Replace( "+", "\\+" ).Replace( ":", "\\:" );
  }

您可能可以通过执行以下操作来清理我对双斜杠的大量使用:

@"\["   etc.

哦......这个正则表达式给你你的第一场比赛:

Regex.Matches( inputString, @"<!--\s*(.+?)\s*-->", RegexOptions.None )[0].Groups[1].Value;

对于:'div-gpt-ad-1383121038726-0'

Regex.Matches( inputString, @"'.*?'", RegexOptions.None )[0].Groups[0].Value;

对于:div-gpt-ad-1383121038726-0(周围没有撇号)

Regex.Matches( inputString, @"'(.*?)'", RegexOptions.None )[0].Groups[1].Value;
于 2013-11-10T20:54:02.993 回答