从没有正则表达式的字符串中剪切网址

时间:2013-12-17 08:19:20

标签: regex string http url

是否有一种通用算法可以从某些字符串中删除网址?

例如:

 string1 = "bla bla bla http://bla.domain.com more blah blah nohttp.domain.with.no.protocol more text bla bla"
 (string2, urls) = wild_magic_appears(string1)
 string2 = "bla bla bla  more blah blah  more text bla bla"
 urls = ["http://bla.domain.com", "nohttp.domain.with.no.protocol"]

我知道正则表达式是最好的解决方案,但我对非正则表达式解决方案很感兴趣

3 个答案:

答案 0 :(得分:1)

在C#中,您可以为以“http://”

开头的网址执行此操作
string str1 = "bla bla bla http://bla.domain.com more blah blah nohttp.domain.with.no.protocol";
string [] array = str1.Split(' ');
Listr<string> urls= new List<string>();

foreach(var s in array)
{
   if(s.StartsWith("http://")) // you can add here other conditions that match url
     urls.Add(s);
}

答案 1 :(得分:0)

Ruby,拆分冒号和空格。

仅限于以http://开头的网址,而您的字符串部分没有冒号。

>a = "bla bla bla http://bla.domain.com more blah blah nohttp.domain.with.no.protocol more text bla bla"
>a.split(":")[0].to_s[-4..-1] + ":" + a.split(":")[1].split()[0].to_s
=> "http://bla.domain.com"

只有点的网址。我想不出一个好的解决方案。

答案 2 :(得分:0)

想一个新的解决方案。只需要拆分“http://”或“https://”。 这个更好地处理用户的冒号。

>a = "bla bla bla http://bla.domain.com more blah blah nohttp.domain.with.no.protocol more text bla bla"
>("http://"+a.split("http://")[1].to_s).split()[0]
=>"http://bla.domain.com"