1

我将如何解析以下内容:

wr("website-url.com</span>")

使用来自 HTML 代码的正则表达式?

似乎无法弄清楚如何提取website-url.com

位于 HTML 中的整个 JavaScript:

<script type="text/javascript">wr("<span>maddog");wr("@");wr("website-url.com</span>")</script>

尝试过正则表达式,例如:

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

但似乎无法让它工作

4

4 回答 4

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

d 是最终结果,但您可以修改代码以处理字符串中的双引号。

于 2012-10-23T20:58:27.157 回答
0

您获得此 javascript 的站点似乎不希望您解析其 html。它使用 javascript 函数创建动态 html wr。下面是执行此 javascript 并解析结果代码的代码。但是我不能说这是一个简单的跟踪代码

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;
    }
}

- - - - 编辑 - - - -

我不确定如何编写“获取所有 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;
}
于 2012-10-23T21:19:12.553 回答
0

这个想法是:

  • 使用一个正则表达式获取所有 wr(*) 字符串。
  • 删除引号 (")
  • 删除<span></span>

这是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

maddog@website-url.com

于 2012-10-23T21:38:45.763 回答
-1

如果您正在使用正则表达式来解析 HTML,那么您可能正在做一些您可能正在做简单的事情的艰难方式。在 C# 中,尝试使用HTML Agility Pack。另见关于此事的最终问题

于 2012-10-23T20:41:22.467 回答