none
字符串中截取指定子字符串的问题 RRS feed

  • 问题

  • string a=......adfasdfas价格:<b>123.50</b>fasdfad......
    string b=.......adfafffd价格:<b>10000.00</b>fasdfa......

    a、b都为很长的字符串,我现在想截取 价格:<b></b>里面的数字,

    我原来是用 a.IndexOf(“价格:<b>")获得位置后用a.Substring()截取

    可数字不是定长的,截取出来的不是长就是短了,所以想到是不是能用正则表达式来截取?本人对正则表达式一窍不通,希望各位指点一下!!!

    2010年4月3日 7:41

答案

  • 用正则表达式
    价格.*?<b>(.+?)</b>

    简单解释下:

    正则表达式里面,除了特殊字符,其他字符都是表示完全符合。比如"价格","<b>", "</b>"

    用点"."表示任意字符。

    用星号"*"表示前一个字符重复零或者任意次。

    用加号"+"表示前一个字符重复任意次,至少一次。

    正着表达式 "价格.*?<b>(.+?)</b>"的意思是,找到一个字符串,它必须有"价格",之后任意字符重复任意次,之后接着必须有<b>,之后任意字符重复至少超过一次,之后接着必须有</b>

    把<b>和</b>之间用括号括起来是为了抽取。C#的示范代码里面可以看到,如果匹配成功,抽取第一个括起来的字符串。

    string a = "......adfasdfas价格:<b>123.50</b>fasdfad......";
    
    string pattern = "价格.*?<b>(.+?)</b>";
    
    var match = Regex.Match(a, pattern);
    
    if (match.Success) {
        string price = match.Groups[1].Value;
    }

    MCPD (Windows & Web)
    2010年4月3日 8:55