日期:2014-05-18  浏览次数:20928 次

字符串trim的使用问题
我有一段字符串“   <TD   height=25> <FONT   style= "FONT-SIZE:   8pt "> <B> 2.8.0.8 </B> </FONT> </TD> ”
我想要提取 <B> </B> 中间的字符串   “8.8.0.8”,所以我用了字符串的trim函数,代码如下:
trimChar   =   " <TD   height=25> <FONT   style=\ "FONT-SIZE:   8pt\ "> <B> ";
line   =   line.TrimStart(trimChar.ToCharArray());
trimChar   =   " </B> </FONT> </TD> ";
line   =   line.TrimEnd(trimChar.ToCharArray());

运行之后发现问题:如果我要提取的字符串开头或末尾包含有trimChar中的字符,那样我要的字符也会被trim掉,比如我开头的trimchar有8这个数字,那么我最终提取到的字符串就只有   “.8.0.8”而不是“8.8.0.8”,这种问题要如何解决??或者说哪位高手有更好的提取字符串的办法??要说明的是我要提取的字符串是IP地址,位数不定,只知道是在 <B> </B> 之间。

------解决方案--------------------
要说明的是我要提取的字符串是IP地址,位数不定
------------
我所给的只是根据你这个需求来写的,需求不同,当然可以写不同的正则

按你原来的思路,可以用SubString或者Remove把不要的内容去掉,但这样做局限性岂不是更大

如你所说,如果要提取的内容两侧固定,那就是符合一定的规律,可以换种形式的正则来做

比如“只知道是在 <B> </B> 之间”这种需求

提取单个这样写

string yourStr = ..........;
string ip = string.Empty;
Match m = Regex.Match(yourStr, @ "(? <= <b> )[\s\S]*?(?= </b> ) ", RegexOptions.IgnoreCase);
if (m.Success)
{
ip = m.Value;
}


提取多个这样写

string yourStr = .........;
MatchCollection mc = Regex.Matches(yourStr, @ "(? <= <b> )[\s\S]*?(?= </b> ) ", RegexOptions.IgnoreCase);
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "\n ";
}