我有一个这样的字符串:
自行车:http://website.net/bikeurl玩具:http://website.net/rc-cars
日历:http://website.net/schedule
我想匹配我指定的单词和后面的第一个网址。因此,如果我将单词指定为“Bike”,我应该得到:
或者如果可能的话,只有自行车词的网址:
或者,如果我指定玩具,我应该得到:
或如果可能的话
我正在使用这个正则表达式:
(Bike)(.*)((https?|ftp):/?/?)(?:(.*?)(?::(.*?)|)@)?([^:/\s]+)(:([^/]*))?(((?:/\w+)*)/)([-\w.]+[^#?\s]*)?(\?([^#]*))?(#(.*))?
匹配:
我只想要:
我不是正则表达式专家,我尝试使用{n} {n,},但它要么不匹配,要么匹配相同
我正在使用.NET C#所以我在这里测试http://regexhero.net/tester/
答案 0 :(得分:0)
这是另一种方法:
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}" );
答案 1 :(得分:0)
如果我理解你的问题。您需要一个通用的正则表达式,它将根据单词选择一个URL。这是一个可以选择包含bike
的网址的人:
(.(?<!\s))*\/\/((?!\s).)*bike((?!\s).)*
如果您将bike
替换为任何其他字词。它会选择相应的网址。
编辑1:
根据您的编辑,以下是根据网址前面的字词进行选择的内容:
(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的那个之间有一个//
。
答案 2 :(得分:0)
如果你真的需要确定它是一个网址:
这是另一个解决方案。我会将字典中的自行车,玩具和日历分开,然后将网址作为值,然后在需要时调用它。
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
}
}
希望我的一个想法可以帮到你。