C# 正则表达式C中大于符号的问题#

C# 正则表达式C中大于符号的问题#,c#,regex,C#,Regex,我正在尝试从html中提取一个特定的标记(我从本网站的阅读中知道,您不应该尝试用正则表达式解析html,但我只需要遵循非常特定顺序的特定标记) 这是一个正则表达式(在Expresso中进行了测试),它可以正常工作 (?<ExternalSource2>\<eds2[\s.]+url\=\"?(?<Url>[\w\./:\?=&\+%\d_-]+)\"?[\s.]*\>(?<Text>[\s.]*[\w\s\d]*)\</eds2\&g

我正在尝试从html中提取一个特定的标记(我从本网站的阅读中知道,您不应该尝试用正则表达式解析html,但我只需要遵循非常特定顺序的特定标记)

这是一个正则表达式(在Expresso中进行了测试),它可以正常工作

(?<ExternalSource2>\<eds2[\s.]+url\=\"?(?<Url>[\w\./:\?=&\+%\d_-]+)\"?[\s.]*\>(?<Text>[\s.]*[\w\s\d]*)\</eds2\>)
这完全不是我所期望的

但是,当您使用下面的代码时,结果比我预期的要多(但仍然不是完全如此):

预期产出为:

Match : <eds2 url="http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147">PlaceLogo</eds2>

Group 0 = <eds2 url="http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147">PlaceLogo</eds2>

Group 1 = <eds2 url="http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147">PlaceLogo</eds2>

Group 2 = http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147

Group 3 = PlaceLogo
匹配:PlaceLogo
组0=PlaceLogo
第1组=PlaceLogo
第2组=http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147
第3组=PlaceLogo

非常感谢您的帮助。

我无法用示例代码重现您的问题。它创建以下输出:

Match : <eds2 url="http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147">PlaceLogo</eds2>

Group 0 = <eds2 url="http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147">PlaceLogo</eds2>

Group 1 = <eds2 url="http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147">PlaceLogo</eds2>

Group 2 = http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147

Group 3 = PlaceLogo
匹配:PlaceLogo
组0=PlaceLogo
第1组=PlaceLogo
第2组=http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147
第3组=PlaceLogo
请澄清你的问题

更新:
我想,你的问题如下: 您可以将匹配结果直接写入响应流,而无需对其进行转义。这意味着,它将被解释为HTML,而不是您想要的文本。
您应该将代码更改为:

Regex re = new Regex(@"(?<ExternalSource2>\<eds2[\s.]+url\=\""?(?<Url>[\w\./:\?=&\+%\d_-]+)\""?[\s.]*\>(?<Text>[\s.]*[\w\s\d]*)\</eds2\>)");

string Input = @"width: 662px; height: 60px; vertical-align: middle""><eds2 url=""http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147"">PlaceLogo</eds2></td></tr></tbody></table><table style=""width: 662px; border-collapse: collapse""><tbod";

foreach (Match m in re.Matches(Input))
{
    HttpContext.Current.Response.Write(string.Format("Match : {0}<br/>",
                                                     Server.HtmlEncode(m)));
    short i = 0;
    foreach (Group g in m.Groups)
    {
        HttpContext.Current.Response
                           .Write(string.Format("Group {0} = {1}<br/>", i++, 
                                                Server.HtmlEncode(g.Value)));
    }
    HttpContext.Current.Response.Write("<br/><br/>");
}
Regex re=new Regex(@“(?\(?[\s.]*[\w\s\d]*)\)”;

字符串输入=@“宽度:662px;高度:60px;垂直对齐:中间”“>PlaceLogo您到底想提取什么?你能告诉我们预期的输出是什么吗?我在上面添加了预期的输出,这也是其他人得到的,但不幸的是,这不是我得到的。丹尼尔,你对我的代码做了任何更改吗?你所拥有的是我所期待的,但不是我所得到的。这让我很恼火。我的.Net中的正则表达式库是否可能以某种方式过时?我只更改了返回结果的方式。这可能是解决办法。我会马上更新我的答案。哇,我是个白痴。你是对的,我不是HtmlEncoding它是我的'问题'的原因不敢相信我浪费了几个小时在这个。谢谢你指出这一点。
Match : eds2 url="http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147">PlaceLogo
Group 0 = eds2 url="http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147">PlaceLogo
Group 1 = http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147
Group 2 = PlaceLogo
Match : <eds2 url="http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147">PlaceLogo</eds2>

Group 0 = <eds2 url="http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147">PlaceLogo</eds2>

Group 1 = <eds2 url="http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147">PlaceLogo</eds2>

Group 2 = http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147

Group 3 = PlaceLogo
Match : <eds2 url="http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147">PlaceLogo</eds2>

Group 0 = <eds2 url="http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147">PlaceLogo</eds2>

Group 1 = <eds2 url="http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147">PlaceLogo</eds2>

Group 2 = http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147

Group 3 = PlaceLogo
Regex re = new Regex(@"(?<ExternalSource2>\<eds2[\s.]+url\=\""?(?<Url>[\w\./:\?=&\+%\d_-]+)\""?[\s.]*\>(?<Text>[\s.]*[\w\s\d]*)\</eds2\>)");

string Input = @"width: 662px; height: 60px; vertical-align: middle""><eds2 url=""http://www.someurl.co.uk/_modules/system/Newsletter.aspx?Username=TBO&Password=N5TBO2&TagID=PlaceLogo&TownID=147"">PlaceLogo</eds2></td></tr></tbody></table><table style=""width: 662px; border-collapse: collapse""><tbod";

foreach (Match m in re.Matches(Input))
{
    HttpContext.Current.Response.Write(string.Format("Match : {0}<br/>",
                                                     Server.HtmlEncode(m)));
    short i = 0;
    foreach (Group g in m.Groups)
    {
        HttpContext.Current.Response
                           .Write(string.Format("Group {0} = {1}<br/>", i++, 
                                                Server.HtmlEncode(g.Value)));
    }
    HttpContext.Current.Response.Write("<br/><br/>");
}