我有这个脚本来自谷歌广告:
<!-- 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
从字符串中,任何人都可以帮忙吗?
答案 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;