C# 使用正则表达式从字符串中检索数字
虽然我遇到了困难,但我想做的事情相当简单。我有一个字符串,它是一个url,它的格式是我想要检索的someid部分。我想我可以使用正则表达式,但我对它们不是很在行,这就是我尝试的:C# 使用正则表达式从字符串中检索数字,c#,.net,regex,C#,.net,Regex,虽然我遇到了困难,但我想做的事情相当简单。我有一个字符串,它是一个url,它的格式是我想要检索的someid部分。我想我可以使用正则表达式,但我对它们不是很在行,这就是我尝试的: Match match = Regex.Match(theString, @"*.?id=(/d.)"); 我收到一个regex异常,说解析regex时出错。我阅读这篇文章的方式是“任意数量的字符”,然后是文本“?id=“”,后面跟着任意数量的数字“。我把数字排成一组,这样我就可以把它们拔出来。我不确定这是怎么回事。
Match match = Regex.Match(theString, @"*.?id=(/d.)");
我收到一个regex异常,说解析regex时出错。我阅读这篇文章的方式是“任意数量的字符”
,然后是文本“?id=“
”,后面跟着任意数量的数字“。我把数字排成一组,这样我就可以把它们拔出来。我不确定这是怎么回事。如果有人能告诉我我做错了什么,我将不胜感激,谢谢 试试看
var match = RegEx.Match(theString, @".*\?id=(\d+)");
你的正则表达式中有几个错误。试试这个:
Match match = Regex.Match(theString, @".*\?id=(\d+)");
具体而言,我:
- 将
更改为*.
(点匹配所有非换行符,*
表示前面的字符为零或更多)*
- 在
之前添加了转义序列,因为问号是正则表达式中的特殊字符。它表示零或前面的一个?
- 将
更改为/d.
(您的斜杠走错了方向,您使用了上面解释的点,而不是上面解释的\d*
)*
- 该错误可能是由于前面的
引起的。正则表达式中的*
字符与前一个字符的零次或多次匹配;所以它不能是第一个字符李>*
- 可能是打字错误,但数字的快捷方式是
,而不是\d
/d
匹配任何字符,您需要匹配一个或多个数字-因此使用+
是一个特殊字符,因此需要对其进行转义?
Match match = Regex.Match(theString, @".*\?id=(\d+)");
尽管如此,regex并不是最好的工具;使用适当的查询字符串解析器,否则事情最终将变得难以管理。不需要正则表达式。只需使用内置的实用程序
string query = new Uri("http://www.somedomain.com?id=someid").Query;
var dict = HttpUtility.ParseQueryString(query);
var value = dict["id"]