这个正则表达式有什么问题?

时间:2010-06-19 12:43:31

标签: regex

我是初学者,并且在regexp方面遇到了一些问题。

输入文字是:idUser = 123654; nick =“汤姆”的东西

我需要提取idUser的值 - > 123456

我试试这个:

//idUser is already 8 digits number
        MatchCollection matchsID = Regex.Matches(pk.html, @"\bidUser=(\w{8})\b");
        Text = matchsID[1].Value;

但是在输出上我得到idUser = 123654,我只需要数字

第二个问题是nick =“Tom”,我怎样才能从这个表达中获得文本Tom。

4 个答案:

答案 0 :(得分:1)

您不会显示输出代码,从匹配集合中获取该组。

提示:如果你想只有括号中的内容,你将需要第1组,而不是第0组。

答案 1 :(得分:0)

.*?idUser=([0-9]+).*?

正则表达式适合你:o)

答案 2 :(得分:0)

这是一个应该有效的模式:

\bidUser=(\d{3,8})\b|\bnick="(\w+)"

给定输入字符串:

something idUser=123654; nick="Tom" something

这会产生2个匹配(as seen on rubular.com):

  • 第一场比赛是User=123654,第一场比赛是123654
  • 第二场比赛为nick="Tom",第二场比赛为Tom

一些变化:

  • 在.NET正则表达式中,您还可以使用命名组来提高可读性。
  • 如果nick后总是显示idUser,则可以一次匹配这两个,而不是使用上述替换。
  • 我使用{3,8}重复来展示如何匹配至少3位,最多8位数。

API链接

答案 3 :(得分:0)

使用look-around

(?<=idUser=)\d{1,8}(?=(;|$))

要将数字长度固定为6,请使用(?<=idUser=)\d{6}(?=($|;))