【问题标题】:Parsing Movie title with RegEx [closed]使用正则表达式解析电影标题 [关闭]
【发布时间】:2015-01-04 13:42:35
【问题描述】:

如果可以在一个正则表达式中提取电影标题,我有 3 个字符串

<title>Airplane! (1980)</title>    

<title>&#x22;24&#x22; (2001)</title>    

<title>&#x22;Agents of S.H.I.E.L.D.&#x22; The Magical Place (2014)</title>

到目前为止我最好的镜头是这个:

<title>(&#x22;)?(.*?)(&#x22;)?.*?\((\d{4})\).*?</title>

适用于“神盾局特工”和“24”,但不是“飞机!”。

我做错了什么?

尽管在 C# 程序中调用正则表达式可能不清楚,但我正在使用 RegEx

【问题讨论】:

  • 飞机关闭标签丢失/
  • 你为什么使用正则表达式? XML 不是常规语言。您应该使用 XML 库。或者如果它是 HTML,那么你应该像 HtmlAgilityPack 一样。
  • 您还应该使用IMDB's API 而不是检索 HTML。它会更容易使用,因为它返回 XML 而不是 HTML。 HTML 不是一种以编程方式传递数据的格式,它是一种用于可视化显示内容的标记语言。然而,XML 是一种公认​​的在应用程序之间传递数据的格式。
  • @hometoast 我没有说这是不可能的。我说过shouldn't be done,尤其是当有更好的选择时。
  • 使用 HTML 解析器仍然需要您使用 RE 来解析单个文本节点数据,这是该任务的 99%

标签: c# .net regex imdb


【解决方案1】:

RE 表示行首 => 开始标签 => 可选 " => 读到 "(nnnn)

titles = System.Net.WebUtility.HtmlDecode(titles);

foreach (Match match in Regex.Matches(titles, 
         @"^\s*<title>\s*\""*(.*?)(\""|\(\d{4}\))", RegexOptions.Multiline | RegexOptions.IgnoreCase))
{
    if (match.Success)
    {
        string name = match.Groups[1].Value;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    相关资源
    最近更新 更多