如何在C#中从字符串中提取数字

5

我有这个字符串:

http://www.edrdg.org/jmdictdb/cgi-bin/edform.py?svc=jmdict&sid=&q=1007040&a=2

我该如何从“q=”和“&amp”之间提取数字并转化为整数?

因此,在这个例子中,我想要获取数字:1007040


https://dev59.com/U2445IYBdhLWcg3ws8Zp - Jayakumar Thangavel
1
string result = Regex.Match(source, @"q\s*=\s*(?<value>[0-9]+)").Groups["value"].Value; - Dmitry Bychenko
2
我不会把它看作从字符串中获取数字,相反,我会将其视为解析查询字符串 - Crowcoder
1
这是一个URI。不要尝试手动解析它。相反,使用框架内置的工具来完成这个任务。 - Zohar Peled
https://dotnetfiddle.net/le1Xec - Jayakumar Thangavel
4个回答

10

你实际上正在解析一个URI,因此你可以使用 .Net 库来正确地执行此操作,如下所示:

var str   = "http://www.edrdg.org/jmdictdb/cgi-bin/edform.py?svc=jmdict&amp;sid=&amp;q=1007040&amp;a=2";
var uri   = new Uri(str);
var query = uri.Query;
var dict  = System.Web.HttpUtility.ParseQueryString(query);

Console.WriteLine(dict["amp;q"]); // Outputs 1007040

如果您想要将数字字符串作为整数使用,则需要对其进行解析:

int number = int.Parse(dict["amp;q"]);

3
规范化duplicate - Sinatr

1
请使用正则表达式。
String str = "http://www.edrdg.org/jmdictdb/cgi-bin/edform.py?svc=jmdict&amp;sid=&amp;q=1007040&amp;a=2";

Match match = Regex.Match(str, @"q=\d+&amp");

if (match.Success)
{
    string resultStr = match.Value.Replace("q=", String.Empty).Replace("&amp", String.Empty);
    int.TryParse(resultStr, out int result); // result = 1007040
}

1

看起来您想要一个查询参数的URI进行HTML编码。您可以这样做:

Uri uri = new Uri(HttpUtility.HtmlDecode("http://www.edrdg.org/jmdictdb/cgi-bin/edform.py?svc=jmdict&amp;sid=&amp;q=1007040&amp;a=2"));
string q = HttpUtility.ParseQueryString(uri.Query).Get("q");
int qint = int.Parse(q);

1

使用组的正则表达式方法:

public int GetInt(string str)
{
    var match = Regex.Match(str,@"q=(\d*)&amp");
    return int.Parse(match.Groups[1].Value);
}

那里绝对没有错误检查!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接