使用正则表达式从字符串中提取数字

4
我正在尝试做的事情相当简单,但我遇到了困难。我有一个字符串,它是一个URL,格式如下:http://www.somedomain.com?id=someid我想要检索其中的someid部分。我想我可以使用正则表达式,但我不太擅长它们,这是我尝试过的:
Match match = Regex.Match(theString, @"*.?id=(/d.)");

我收到了一个正则表达式的异常,说有错误解析正则表达式。我的理解是先匹配任意数量的字符,然后是字面量 "?id=",最后是任意数量的数字。我把数字放进了一组,以便于取出来。但我不确定这有什么问题。如果有人能告诉我哪里错了,我会非常感激,谢谢!
4个回答

6
不需要使用正则表达式。只需使用内置实用程序即可。
string query = new Uri("http://www.somedomain.com?id=someid").Query;
var dict = HttpUtility.ParseQueryString(query);

var value = dict["id"]

4

你的正则表达式中有几个错误,试试这个:

Match match = Regex.Match(theString, @".*\?id=(\d+)");

具体来说,我:

  • *. 改为 .*(点匹配除换行符以外的所有字符,而 * 表示前面的字符出现零次或多次)
  • ? 前添加了转义序列,因为问号是正则表达式中的特殊字符,它表示前面的字符出现零次或一次。
  • /d. 改为 \d*(你的斜杠方向错误,并且你使用了上面解释过的点,而不是 *

2

尝试

var match = RegEx.Match(theString, @".*\?id=(\d+)");

1
  • 错误可能是由于前置的*引起的。正则表达式中的*字符匹配前一个字符的零个或多个出现次数;因此它不能是第一个字符。
  • 可能是打字错误,数字的快捷方式是\d,而不是/d
  • .匹配任何字符,您需要匹配一个或多个数字-因此使用+
  • ?是一个特殊字符,所以它需要转义。

因此变成:

Match match = Regex.Match(theString, @".*\?id=(\d+)");

话虽如此,正则表达式并不是处理这个问题的最佳工具;使用适当的查询字符串解析器,否则管理起来最终会变得困难。


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