<div>
<p>1</p>
<p>2</p>
<p>3</p>
</div>
<div>
<p>1</p>
<p>2</p>
<p>3</p>
</div>
<div>
<p>1</p>
<p>2</p>
<p>3</p>
</div>
<div>
<p>1</p>
<p>2</p>
<p>3</p>
</div>
这是我从文本里面读到的数据。。现在
我要取出每个div中第一个p元素值(包括p元素)。。。c#代码。。。不要再给我弄脚本语言
正则表达式可以
结果如下
:
<p>1</p>
<p>1</p>
<p>1</p>
给你个思路,从头遍历整个页面中的字符串,遇到div标签的时候检查<p>标签,如果是第一个的话就放到队列中,然后继续遍历,直到最后。然后从队列(queue)中取出所有的<p>标签,可以参考
http://www.cnblogs.com/q-focus/archive/2011/08/24/2152672.html
谁都知道这个思路是这样做。。。问题代码怎么写
正则表达式匹配
等于没说
if (!IsPostBack)
{
string str = @"
<div><p>1</p><p>2</p><p>3</p></div>
<div><p>1</p><p>2</p><p>3</p></div>
<div><p>1</p><p>2</p><p>3</p></div>
<div><p>1</p><p>2</p><p>3</p></div>
";
string newStr = "<Test>" + str + "</Test>";//制作出一个只有一个根的xml
XmlDocument xd = new XmlDocument();
xd.LoadXml(newStr);//对xml进行解析
string outputStr = ""; //输出字符串
XmlNodeList list = xd.GetElementsByTagName("div");
foreach (XmlNode item in list)
{
outputStr += item.FirstChild.OuterXml;//得到div下面的第一个子节点的内容
}
Response.Write(Server.HtmlEncode(outputStr));//原样输出最后得到的<p>1</p><p>1</p><p>1</p>,不使用Server.HtmlEncode则输出的为1 1 1 1
}
抱歉,正则不过关。进行处理下就是个xml了,对xml进行解析就相对容易些!
可以 加个 根节点,转成xml 来处理
XElement xe = XElement.Parse(string.Concat("<text>", str, "</text>"));
var query = xe.Descendants("div").Select(s=>s.Elements("p").FirstOrDefault());
还是用正则表达式好,不容易出错,也性能高。给你写了个正则表达式:
(?<=<div>\s*)<(?<tag>[^\s>]+)[^>]*>.*?</\k<tag>>
支持正则表达式,html不严谨使用xml会有问题。