C#在两个字符串之间获取字符串

时间:2013-11-10 20:24:30

标签: c# regex string ads

我有这个脚本来自谷歌广告:

        <!-- 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(因此我可以为头标记渲染脚本)。

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

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, "<!-- ", " -->");

但是它返回一个空字符串。

任何人都可以帮帮我吗?或者有人有更好的方法吗?

修改

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

1 个答案:

答案 0 :(得分:1)

如果你打算使用正则表达式,我不会使用帮助器“GetTextBetween”函数。我会在每种情况下写一个正则表达式。但是,如果你想使用它,那么特殊字符就会出现一些问题(因为对于leftString和rightString,你想要准确地找到它们,并且没有任何特殊符号被视为正则表达式的一部分。)leftWord and 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;

For:'div-gpt-ad-1383121038726-0'

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

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

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