public class MyExample
{
public static void Main(String[] args)
{
string input = "<a href=\"http://tvrss.net/search/?show_name=The+Venture+Bros&show_name_exact=true\">The Venture Bros</a></p></li>";
// Call Regex.Match
Match m = Regex.Match(input, "/show_name=(.*?)&show_name_exact=true\">(.*?)</i");
// Check Match instance
if (m.Success)
{
// Get Group value
string key = m.Groups[1].Value;
Console.WriteLine(key);
// alternate-1
}
}
我想要“The Venture Bros”作为输出(在本例中)。
答案 0 :(得分:2)
我认为这是因为你试图在前端和末尾做一个perl风格的斜杠。其他几位回答者已经对此感到困惑。他写这篇文章的方式是,他试图通过开始和结束/并将i放在最后,以你在perl中这样做的方式来区分大小写。
但是我很确定.NET正则表达式不会那样工作,而这正是造成问题的原因。
编辑:更具体一点,看看RegexOptions,我从MSDN中提取的一个例子是这样的:
Dim rx As New Regex("\b(?<word>\w+)\s+(\k<word>)\b", RegexOptions.Compiled Or RegexOptions.IgnoreCase)
关键是“RegexOptions.IgnoreCase”,它会导致您使用/ pattern / i尝试的效果。
答案 1 :(得分:2)
试试这个:
string input = "<a href=\"http://tvrss.net/search/?show_name=The+Venture+Bros&show_name_exact=true\">The Venture Bros</a></p></li>";
// Call Regex.Match
Match m = Regex.Match(input, "show_name=(.*?)&show_name_exact=true\">(.*?)</a");
// Check Match instance
if (m.Success)
{
// Get Group value
string key = m.Groups[2].Value;
Console.WriteLine(key);
// alternate-1
}
答案 2 :(得分:1)
由于show_name
之前的问号。它是输入但不是模式,因此不匹配。
此外,您尝试匹配</i
但输入不包含此内容(它包含</li>
)。
答案 3 :(得分:1)
你的案例中正确的正则表达式是
^.*&show_name_exact=true\"\>(.*)</a></p></li>$
regexp很棘手,但在http://www.regular-expressions.info/你可以找到一个很棒的教程
答案 4 :(得分:1)
/ = SHOW_NAME(。)及?show_name_exact =真\“&GT;()
会按照您的预期相信。但另一件事我注意到,你是想要获得组[1]的值,但我相信你想要组[2]的值,因为会有3组,第一组是匹配,第二个是第一组...
Gl;)
答案 5 :(得分:0)
首先正则表达式启动“/ show_name”,但目标字符串有“/?show_name”,因此第一个组不希望第一个预期命中。
这将导致整个正则表达式失败。
答案 6 :(得分:0)
好的,让我们打破这个。
测试数据:"<a href=\"http://tvrss.net/search/?show_name=The+Venture+Bros&show_name_exact=true\">The Venture Bros</a></p></li>"
原始正则表达式:"/show_name=(.*?)&show_name_exact=true\">(.*?)</i"
工作正则表达式:"/\?show_name=(.*)&show_name_exact=true\">(.*)</a"
我们将从左侧开始,通过正则表达式向右走。
“?”成了“\?”这是因为“?”表示前面的字符或组是可选的。当我们在它之前放一个斜杠时,它现在匹配一个文字问号。
"(.*?)"
成为"(.*)"
括号表示一个组,问号表示“可选”,但“*”已经表示“0或更多”,所以这只是删除冗余。
"</i"
变为"</a"
此更改与您使用"</a>"
标记终止该锚的实际文本相匹配。
建议的正则表达式:"[\\W]show_name=([^><\"]*)&show_name_exact=true\">([^<]*)<"
(添加了额外的\ n以提供正确的c#字符串转义。)
在c#中测试正则表达式的一个很好的工具是code.google.com上的regex-freetool