C# 从HTML代码中解析以下内容?

C# 从HTML代码中解析以下内容?,c#,regex,C#,Regex,我将如何解析以下内容: wr("website-url.com</span>") 试过正则表达式,比如: wr("(.+?)\s*<\/span>") wr(“(.+?)\s*”) 但是似乎无法让它工作如果您使用正则表达式来解析HTML,那么您可能正在以一种简单的方式做一些困难的事情。在C#中,尝试使用。另请参见有关此问题的说明。字符串a=wr(“疯狗”);wr(“@”);wr(“网址url.com”); string a = <script type="te

我将如何解析以下内容:

wr("website-url.com</span>")
试过正则表达式,比如:

wr("(.+?)\s*<\/span>")
wr(“(.+?)\s*”)

但是似乎无法让它工作

如果您使用正则表达式来解析HTML,那么您可能正在以一种简单的方式做一些困难的事情。在C#中,尝试使用。另请参见有关此问题的说明。

字符串a=wr(“疯狗”);wr(“@”);wr(“网址url.com”);
string a = <script type="text/javascript">wr("<span>maddog");wr("@");wr("website-url.com</span>")</script>;
string[] b= a.replace("script type="text/javascript">","").replace("</script>","").split(';').ToArray();
string c = b.Last();
string d = c.replace("wr(","").replace("</span","");
string[]b=a.replace(“script type=“text/javascript”>”,“”)。replace(“,”).split(“;”).ToArray(); 字符串c=b.Last();
字符串d=c.replace(“wr(“,”).replace(似乎您获得此javascript的站点不希望您解析其html。它使用javascript函数
wr
创建动态html。下面是执行此javascript并解析结果代码的代码。Hovewer我不能说这是一个简单的跟踪代码

public void Test()
{
    //C# object which will be accessed by javascript
    var csharpObj = new MyCSharpObject();

    //Create Javascript object
    Type scriptType = Type.GetTypeFromCLSID(Guid.Parse("0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC"));
    dynamic obj = Activator.CreateInstance(scriptType, false);
    obj.Language = "Javascript";
    obj.AddObject("csharp", csharpObj);

    //Load Html (your string in question)
    string html = @"<script type=""text/javascript"">wr(""<span>maddog"");wr(""@"");wr(""website-url.com</span>"")</script>";
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(html);

    //Create "wr" function
    string script = "function wr(s){csharp.wr(s);}";

    //Get the text of script tag                
    script += doc.DocumentNode.SelectSingleNode("//script").InnerText;

    //Execute script
    obj.Eval(script);

    //Load the string created by javascript execution
    doc.LoadHtml(csharpObj.Output);

    //tada.....
    var eMailAddress = doc.DocumentNode.InnerText;

    Console.WriteLine(eMailAddress);
}

[ComVisible(true)]
public class MyCSharpObject
{
    public string Output = "";
    public void wr(string s)
    {
        Output += s;
    }
}
公共无效测试()
{
//javascript将访问的C#对象
var csharpObj=新的MyCSharpObject();
//创建Javascript对象
类型scriptType=Type.GetTypeFromCLSID(Guid.Parse(“0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC”);
dynamic obj=Activator.CreateInstance(scriptType,false);
obj.Language=“Javascript”;
对象AddObject(“csharp”,csharpObj);
//加载Html(有问题的字符串)
字符串html=@“wr”(“maddog”);wr(“@”);wr(“'website url.com”);
HtmlAgilityPack.HtmlDocument doc=新的HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
//创建“wr”函数
string script=“函数wr(s){csharp.wr(s);}”;
//获取脚本标记的文本
script+=doc.DocumentNode.SelectSingleNode(//script”).InnerText;
//执行脚本
目标评估(脚本);
//加载javascript执行创建的字符串
doc.LoadHtml(csharpObj.Output);
//多田。。。。。
var eMailAddress=doc.DocumentNode.InnerText;
Console.WriteLine(电子邮件地址);
}
[ComVisible(true)]
公共类MyCSharpObject
{
公共字符串输出=”;
公共空间wr(字符串s)
{
输出+=s;
}
}
------编辑-----

我不知道如何写“获取所有wr(*)字符串

虽然您似乎想要这样的解决方案,但我不会依赖正则表达式来解析html

public void Test2()
{
    string html = @"<script type=""text/javascript"">wr(""<span>maddog"");wr(""@"");wr(""website-url.com</span>"")</script>";

    var parsedHtml = String.Join("",Regex.Matches(html, @"wr\(\""(.+?)\""\)")
                                            .Cast<Match>()
                                            .Select(m => m.Groups[1].Value));

    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(parsedHtml);
    var eMailAddress = doc.DocumentNode.InnerText;
}
public void Test2()
{
字符串html=@“wr”(“maddog”);wr(“@”);wr(“'website url.com”);
var parsedHtml=String.Join(“,Regex.Matches(html,@“wr\(.+?)\”))
.Cast()
.Select(m=>m.Groups[1].Value));
HtmlAgilityPack.HtmlDocument doc=新的HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(parsedHtml);
var eMailAddress=doc.DocumentNode.InnerText;
}
这个想法是:

  • 使用一个正则表达式获取所有wr(*)字符串
  • 删除引号(“”)
  • 删除
这里有一个Python解决方案

import re

def geturl(text):
    '''
    Get all the wr(*) strings.
    Remove quotes.
    Remove <span> and </span>
    '''
    regex = re.compile(r'wr\(([^)]*)\)')
    match = regex.findall(xx)
    url = ''.join([s.replace('"', '') for s in match])
    url = url.replace('<span>', '').replace('</span>', '')
    return url

if __name__ == '__main__':
    xx = '''<script type="text/javascript">wr("<span>maddog");wr("@");wr("website-url.com</span>")</script>'''
    url = geturl(xx)
    print url
重新导入
def geturl(文本):
'''
获取所有wr(*)字符串。
删除引号。
移去
'''
regex=re.compile(r'wr\([^)]*)\)
match=regex.findall(xx)
url=''.join([s.replace(''','')用于匹配中的s])
url=url.replace(“”,“”),replace(“”,“”)
返回url
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
xx=''wr(“疯狗”);wr(“网站url.com”)''
url=geturl(xx)
打印url

给出
maddog@website-url.com

它是HTML中的javascript请在投票时留下评论。如果它是HTML中的javascript,为什么要将它标记为c#regex?我认为这个答案有两个问题a)试图用regex解析HTML(请参见)b)OP想要一个c#解决方案我该如何用c#写它我不知道如何编写“获取所有wr(*)字符串”。如果html代码从未更改,这可能会起作用,但即使是额外的代码也会使此解决方案失败。
import re

def geturl(text):
    '''
    Get all the wr(*) strings.
    Remove quotes.
    Remove <span> and </span>
    '''
    regex = re.compile(r'wr\(([^)]*)\)')
    match = regex.findall(xx)
    url = ''.join([s.replace('"', '') for s in match])
    url = url.replace('<span>', '').replace('</span>', '')
    return url

if __name__ == '__main__':
    xx = '''<script type="text/javascript">wr("<span>maddog");wr("@");wr("website-url.com</span>")</script>'''
    url = geturl(xx)
    print url