【问题标题】:Extracting a URL in the query part of another URL [duplicate]在另一个 URL 的查询部分中提取 URL [重复]
【发布时间】:2013-05-06 12:26:53
【问题描述】:

如何从这样的字符串中提取有效的 URL

h*tps://www.google.com/url?q=h*tp://www.site.net/file.doc&sa=U&ei=_YeOUc&ved=0CB&usg=AFQjCN-5OX

我想提取这部分:h*tp://www.site.net/file.doc,这是我的有效网址。

【问题讨论】:

  • 你从字符串中的哪个位?
  • 有效是什么意思?你不会用“t”或其他什么代替“*”吗?
  • 正则表达式是正确的方法。定义您要提取的模式,获取正则表达式的匹配项并选择您需要的匹配项。
  • 感谢您的关注,我编辑了问题。
  • FeliceM,由于限制发布两个以上的链接,我将 t 替换为星号。我是新来的!无论如何,谢谢你,这个信息对我有用。

标签: c# html regex


【解决方案1】:

你可以使用split函数

    string txt="https://www.google.com/url?q=http://www.site.net/file.doc&sa=U&ei=_YeOUc&ved=0CB&usg=AFQjCN-5OX";

    txt.split("?q=")[1].split("&")[0];

【讨论】:

  • 后面还有一堆垃圾。
  • 好的。你可以这样使用:'txt.split("?q=")[1].split("&")[0];'
  • 请将其编辑到您的帖子中。
【解决方案2】:

添加 System.Web.dll 程序集并使用带有静态方法的 HttpUtility 类。 示例:

using System;
using System.Web;


class MainClass
{
    public static void Main (string[] args)
    {
        Uri uri = new Uri("https://www.google.com/url?q=http://www.site.net/file.doc&sa=U&ei=_YeOUc&ved=0CB&usg=AFQjCN-5OX");
        Uri doc = new Uri (HttpUtility.ParseQueryString (uri.Query).Get ("q"));
        Console.WriteLine (doc);
    }
}

【讨论】:

  • 协议为h*tpsUri会正确解析字符串吗?
  • Uri 正确解析字符串。
  • 这是不正确的,经过测试并得到Invalid URI: The URI scheme is not valid. 异常。
  • .net/mono 的哪个版本?
  • 5,版本无关,类没有变化。 h*tps 不是一个有效的协议,它怎么解析它?
【解决方案3】:

我不知道您的其他字符串是什么样的,但如果您的“有效 URL”位于第一个 = 和第一个 & 之间,您可以使用:

(?<==).*?(?=&)

它基本上会查找第一个 = 并匹配下一个 &amp; 之前的任何内容。

测试here

【讨论】:

    【解决方案4】:

    在这种特殊情况下,您可以使用您发布的字符串:

    string input = "your URL";
    string newString = input.Substring(36, 22) ;
    

    但是,如果 URL 的初始部分的长度发生了变化,并且您想要提取的部分的长度也发生了变化,那么将无法正常工作。

    【讨论】:

    • 这也很有用,谢谢:
    • 您可以将数字 (36, 22) 替换为 int 变量,并将计数字符的值固定为某个出现。我的回答很基础。
    • @NaourassDerouichi:请使用 Uri 类和 ParseQuery 实用程序来处理 URL。
    猜你喜欢
    • 2013-04-04
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 2013-07-15
    • 2023-03-04
    • 2012-04-30
    • 2013-10-20
    • 1970-01-01
    相关资源
    最近更新 更多