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/
这里有另一种方法:
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的部分,中间有一个//
。