Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将第一个URL与word匹配的正则表达式 我需要什么:_C#_.net_Regex - Fatal编程技术网

C# 将第一个URL与word匹配的正则表达式 我需要什么:

C# 将第一个URL与word匹配的正则表达式 我需要什么:,c#,.net,regex,C#,.net,Regex,我有这样一个字符串: 自行车:玩具: 日历: 我想匹配我指定的单词和它后面的第一个URL。因此,如果我将单词指定为“Bike”,我应该得到: 自行车: 或者,如果可能,仅自行车单词的url: 或者如果我指定了我应该得到的玩具: 玩具: 或者如果可能的话 我使用的是: 我正在使用这个正则表达式: (Bike)(.*)((https?|ftp):/?/?)(?:(.*?)(?::(.*?)|)@)?([^:/\s]+)(:([^/]*))?(((?:/\w+)*)/)([-\w.]+[^#?\s

我有这样一个字符串:

自行车:玩具:
日历:

我想匹配我指定的单词和它后面的第一个URL。因此,如果我将单词指定为“Bike”,我应该得到:

自行车:

或者,如果可能,仅自行车单词的url:

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

玩具:

或者如果可能的话

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

(Bike)(.*)((https?|ftp):/?/?)(?:(.*?)(?::(.*?)|)@)?([^:/\s]+)(:([^/]*))?(((?:/\w+)*)/)([-\w.]+[^#?\s]*)?(\?([^#]*))?(#(.*))?
结果: 它是匹配的:

自行车:玩具:

我只想:

自行车:

我不是正则表达式专家,我尝试使用{n}{n,},但它要么不匹配,要么匹配相同的


我正在使用.NET C#所以我在这里测试

这里是另一种方法:

自行车(.*):\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}" );
var inputString=“自行车:http://website.net/bikeurl 玩具:http://website.net/rc-cars 日历:http://website.net/schedule";
var word=“Bike”;
var url=new Regex(word+@“(.*):\s(?\s*)”)
.Match(输入字符串)
.Result(“${URL}”);

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

(.(?<!\s))*\/\/((?!\s).)*bike((?!\s).)*
它将选择单词+URL,例如
(自行车((?!\s)。*\s+(?!\s)。*
将选择
自行车:http://website.net/bikeurl
(玩具((?!\s)。*\s+(?!\s)。*
将选择
玩具:http://website.net/rc-cars
(日历((?!\s)。*\s+(?!\s)。*
将选择
日历:http://website.net/schedule

如果要确保字符串包含URL,可以改为使用:

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

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

如果您确实需要确保它是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
            }
        }
Dictionary myDic=新字典()
{ 
{“自行车:,”http://website.net/bikeurl" },
{“玩具”:“http://website.net/rc-cars" },
{“日历:,”http://website.net/schedule"  }
};
foreach(myDic中的KeyValuePair项)
{
if(项目键等于(“自行车”))
{
//做点什么
}
}

希望我的一个想法能对你有所帮助

如果您确定第二个单词(url)始终是url,那么匹配肯定会容易得多,因为您不必验证URL的格式。我添加的正则表达式只有在每对都位于不同的行时才能正常工作。@SwenKooij不,我不确定。.我需要确保它是URL,因为它不总是URL。您可以在以后进行验证。首先尝试匹配基本模式,然后验证匹配是否有效。有效的URL无论如何不能包含空格。我添加了示例URL提取逻辑。如果要使用正则表达式检查URL,请将
\S*
部分替换为符合详细URL要求的模式。或者,您可以使用一些.NET URL验证程序来验证URL候选值。RegEx for URL可能非常棘手且容易出错…我需要确保它是一个URL,因为有时它可能是自行车店:我需要选择网站。com URL好的,非常感谢,我怎么能只选择URL?有时情况可能是:男人骑自行车:代码不起作用。你需要有一些URL的定义,对吗?让它成为图案的一部分。如果
website.com
是一个URL,那么
abc.xyz
a.qqqq
是不对的!这是你必须解决的问题。
        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
            }
        }