Regex将第一个URL与单词匹配

本文关键字:单词匹 URL 第一个 Regex | 更新日期: 2023-09-27 18:05:47

我需要什么:

我有一个这样的字符串:

自行车:http://website.net/bikeurl玩具:http://website.net/rc-cars
日历:http://website.net/schedule

我想匹配我指定的单词和它后面的第一个URL。所以如果我指定单词为"自行车",我应该得到:

自行车:http://website.net/bikeurl

或者如果可能的话,只有自行车单词的url:

http://website.net/bikeurl

或者,如果我指定了我应该得到的玩具:

玩具:http://website.net/rc-cars

或者如果可能的话

http://website.net/rc-cars

我正在使用的内容:

我正在使用这个正则表达式:

(Bike)(.*)((https?|ftp):/?/?)(?:(.*?)(?::(.*?)|)@)?([^:/'s]+)(:([^/]*))?(((?:/'w+)*)/)([-'w.]+[^#?'s]*)?('?([^#]*))?(#(.*))?

结果:

它正在匹配:

自行车:http://website.net/bikeurl玩具:http://website.net/rc-cars

我只想要:

自行车:http://website.net/bikeurl

我不是正则表达式专家,我尝试过使用{n}{n,},但它要么与任何内容都不匹配,要么与相同的匹配

我使用的是.NET C#,所以我在这里进行测试http://regexhero.net/tester/

Regex将第一个URL与单词匹配

这里有另一种方法:

Bike(.*?):'s'S*

下面是一个如何仅获得相应URL候选的示例:

var inputString = "Bike’s: http://website.net/bikeurl Toys: http://website.net/rc-cars Calendar: http://website.net/schedule";
var word = "Bike";
var url = new Regex( word + @"(.*?):'s(?<URL>'S*)" )
    .Match( inputString )
    .Result( "${URL}" );

如果你真的需要确保它是一个url,看看这个:

使用Regex 验证URL

Regex检查有效的Url

这是另一个解决方案。我会在字典中分离自行车、玩具和日历,并将url作为一个值,然后在需要时调用它。

        Dictionary<string, string> myDic = new Dictionary<string, string>() 
        { 
            { "Bike’s:",   "http://website.net/bikeurl" },
            { "Toys:",     "http://website.net/rc-cars" },
            { "Calendar:", "http://website.net/schedule"  }
        };
        foreach (KeyValuePair<string, string> item in myDic)
        {
            if (item.Key.Equals("Bike's"))
            {
                 //do something
            }
        }

希望我的一个想法能帮助你。

如果我正确理解你的问题。您需要一个通用正则表达式,它将根据单词选择url。这里有一个可以选择包含bike的url:

(.(?<!'s))*'/'/((?!'s).)*bike((?!'s).)*

如果将bike替换为任何其他单词。它将选择相应的URL。

第1版:
根据您的编辑,这里有一个可以根据URL前的单词进行选择:

(TOKEN((?!'s).)*'s+)((?!'s).)*

它将选择单词+URL,例如
(Bike((?!'s).)*'s+)((?!'s).)*将选择Bike’s: http://website.net/bikeurl(Toy((?!'s).)*'s+)((?!'s).)*将选择Toys: http://website.net/rc-cars(Calendar((?!'s).)*'s+)((?!'s).)*将选择Calendar: http://website.net/schedule
如果你想确保字符串包含一个URL,你可以使用这个:

(TOKEN((?!'s).)*'s+)((?!'s).)*'/'/((?!'s).)*

它将确保字符串的第二部分,即应该包含URL的部分,中间有一个//