【问题标题】:How to extract a URL from a 200 character string of words in C#, preferably using RegExp如何从 C# 中的 200 个字符串中提取 URL,最好使用 RegExp
【发布时间】:2009-12-27 02:41:00
【问题描述】:

我想实现一个 RegExp(正则表达式),它可以检查一个字符串以查看它是否包含“http://”(即它包含一个 URL),然后将整个 URL 放入一个新的字符串变量中.我使用的字符串不是 HTML,它只是包含任何单词、字符、数字和 URL 排列的文本。

我想我会在我的字符串中寻找“http://”的提及,并取一个起点为 http:// 的新字符串,字符串的结尾是下一个空格点在完整 URL 之后。

请帮忙,我找了好几家都没有用!

提前致谢, 亚历克斯

【问题讨论】:

  • 需要一个例子,什么可以用来知道 url 的结尾与任何文本的其余部分。好资源顺便说一句:regular-expressions.info
  • 好吧,就拿你的普通推特帖子来说吧。这就是我正在处理的文本(实际上少于 200 个字符串)。来自 Twitter 的 JSON 格式信息在文本消息正文中包含非 HTML 嵌套 URL。我很想知道如何编写甚至阅读一个简单的正则表达式,但恐怕我真的很挣扎:S
  • 是时候学习了——我提供的网站非常擅长逐步构建正则表达式,它列出了可用于在代码中实现正则表达式之前测试正则表达式的软件。我自己使用 RegexCoach。
  • 一个公平点,如果有的话......嗯......元字符!不过,如果有人可以提供帮助,请这样做。我认为 RegEx 是我在这里唯一的选择,尤其是因为我知道它们与使用 String 方法相比效率更高(我曾经使用 Perl;)
  • 那你可能会失望。整个 PERL 语言和运行时系统都围绕使 regexp 快速进行优化,因为这是主要用例。在 .NET 中,您可能需要付出一些努力才能使正则表达式表现良好。

标签: c# .net asp.net regex string


【解决方案1】:

我一直在像 here 这样回答某事。我想可以更改代码以满足您的需要;它加载文本文件并搜索 url。

using (StreamReader reader = new StreamReader(File.OpenRead("c:\\test.txt")))
{
    string content = reader.ReadToEnd();
    string pattern = @"((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)";
    MatchCollection matches = Regex.Matches(content, pattern);
    foreach (Match match in matches)
    {
        GroupCollection groups = match.Groups;
        Console.WriteLine("'{0}' repeated at position {1}",
                          groups[0].Value, groups[0].Index);
    }
}

希望这会有所帮助,问候

【讨论】:

  • 非常感谢,看起来不错,我明天试试,告诉你:)
  • 我对此做了一些调整,但 RegEx 部分非常适合从字符串中提取任何 Internet 地址。谢谢!!
猜你喜欢
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 2019-04-20
  • 2021-05-29
  • 2012-04-03
  • 2020-03-22
相关资源
最近更新 更多