在C#中获取URL的某些部分

时间:2014-12-22 05:54:51

标签: c# regex

我需要从网址获取版本没有部分。网址将如下所示" http://myweb.com/api/v1/customer"。我需要得到" 1"来自网址的价值。我怎么能这样做?

提前致谢

5 个答案:

答案 0 :(得分:6)

您可以使用Uri类,它具有专门用于解析uris的内置解析器,并公开了一个很好的API来检查URI的组件。

Uri uri = new UriBuilder("http://myweb.com/api/v1/customer").Uri;
string versionString = uri.Segments[2]; // v1/

当然,您可以进一步处理此选项以仅提取数字,如下一个代码段所示。这样做的好处是,在使用正则表达式解析URI时,您不必担心复杂的边缘情况。

int version = int.Parse(Regex.Match(versionString, @"\d+").Value);

以下是演示:http://ideone.com/4kgey7

答案 1 :(得分:2)

您可以使用下面的外观断言,

Regex.Match(yourstring, @"(?<=/v)\d+(?=/)").Value;
  • (?<=/v)肯定的后瞻声明匹配必须以/v
  • 开头
  • \d+匹配一个或多个数字。
  • (?=/)正向前瞻声明匹配必须后跟正斜杠/字符。

DEMO

答案 2 :(得分:1)

如果您正在使用MVC,则可以使用属性路由:

[GET("api/v{version:int}/customer")]
public ActionResult GetCustomer(int version) {
...

http://attributerouting.net/

答案 3 :(得分:0)

string line = "http://myweb.com/api/v1/customer"
string[] arr = line.Split('\');

foreach(string str in arr)
{
    if(str[0] == 'v')
    {
       int v = Convert.ToInt32(str.SubString(1));
    }
}

答案 4 :(得分:0)

(?<=v)\d+

您可以使用这个简单的正则表达式来执行此操作。请参阅演示。

https://regex101.com/r/vN3sH3/36