繁体   English   中英

正则表达式用单词匹配第一个URL

[英]Regex Matching First URL with word

我需要的:

我有一个像这样的字符串:

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

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

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

或者,如果可能的话,仅提供Bike字词的网址:

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。 这是一个选择带有bike的网址的网址:

(.(?<!\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,请查看以下内容:

使用正则表达式验证网址

正则表达式检查有效的网址

这是另一个解决方案。 我会将自行车,玩具和日历分开放在字典中,然后将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
            }
        }

希望我的想法之一对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM