文档格式如下<!**********!> 文件头,可有可无
//***********注释行
<xml:tag id=**>
****************
</xml:tag>//***********注释行
<xml:tag id=**>
****************
</xml:tag>如何用正则表达式校验这种类似xml的格式啊,并提取
//***********注释行
和
<xml:tag id=**>
****************
</xml:tag> 这两部分内容啊?救命啊!!!
//***********注释行
<xml:tag id=**>
****************
</xml:tag>//***********注释行
<xml:tag id=**>
****************
</xml:tag>如何用正则表达式校验这种类似xml的格式啊,并提取
//***********注释行
和
<xml:tag id=**>
****************
</xml:tag> 这两部分内容啊?救命啊!!!
解决方案 »
- SiteMapPath问题,为什么会出现这个问题?
- froms验证
- 请问sqldatasource如何动态设置参数?
- c# winform项目发布 按步骤创建了安装部署工程,但在“添加项目输出组”对话框的“项目”下拉列表看不到任何项目?
- 求救Cache问题,在线等候,请高手帮帮忙
- sharpdevelop的addin tree如何裁减,使其能够为我所用?
- 一个C#的入门问题
- 高手进来~有个问题.
- 把这个方法优化下..............................(人在线)
- 有两个线程,一个线程只会读这个个对象,另一个线程会修改这个对象,这样的情况还需要lock(obj)吗?
- winfrom关闭新窗口后怎么刷新旧窗口
- 为什么会产生这样的异常
string regex1="//.*";获取TAG
string regex2="<xml:tag id=[^>]*>[\\s\\S]*?</xml:tag>";
using System.Text.RegularExpressions;Regex regex = new Regex(
@"//.*",
RegexOptions.IgnoreCase
| RegexOptions.Multiline
);Regex regex = new Regex(
@"<xml:tag id=[^>]*>.*?</xml:tag>",
RegexOptions.IgnoreCase
| RegexOptions.Singleline
);
****************
</xml:tag> string str = "//***********注释行1<xml:tag id=asdf>asdfsa1111</xml:tag> //***********注释行2这两部分内容啊?<xml:tag id=as>asdfsa2222</xml:tag>";
string pattern = "//((?:(?!<xml:tag id=).)+)[\\s]*<xml:tag id=[^>]+>[\\s]*((?:(?!</xml:tag>).)+)[\\s]*</xml:tag>";
System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex(pattern );
System.Text.RegularExpressions.MatchCollection mc = r.Matches(str);
if(mc!= null && mc.Count > 0 ){
System.Collections.Generic.List<string> list1 = new System.Collections.Generic.List<string>();
System.Collections.Generic.List<string> list2 = new System.Collections.Generic.List<string>();
foreach (System.Text.RegularExpressions.Match m in mc)
{
System.Text.RegularExpressions.GroupCollection gc = m.Groups;
if(gc!= null && gc.Count > 2 )
{
list1.Add(gc[1].Value);
list2.Add(gc[2].Value);
}
}
}
MatchCollection mc = reg.Matches(yourStr);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups[1].Value + "\n-------------------------\n";
richTextBox2.Text += m.Groups[2].Value + "\n=========================\n";
}
过客:
(?is)(?<=^|\n)(//[^\n]+)\n(<xml:[^>]*>.*?</xml:tag>)
中^|\n怎么解释啊
谢谢你啦。
好像能够取出标签的内容,但是不能校验格式啊其次我说的<xml:tag id=*>只是一个例子,也有可能是其他的
比如<asp:treeview> 那么怎么在正则表达式里面去匹配首尾标签呢
谢谢啊
MatchCollection mc = reg.Matches(yourStr);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups[1].Value + "\n-------------------------\n";
richTextBox2.Text += m.Groups[2].Value + "\n=========================\n";
}
好像大家都理解错了
再举个例子
<!--文件头--!>
//这是一个注释行
<测试1::csdn url=bbs>
这是我经常上的bbs论坛
</测试1::csdn>//这还是一个注释行
<测试2::cnblog name=博客>
也是一个学习的好地方
</测试2::cnblog>//最后一个例子
<换个名字::sina class=新闻>
看看新闻吧
</换个名字::sina>我需要做的是
首先校验文本内容的格式,这里有点类似XML格式(标签内的文本内容不存在<或>这两种字符),假设如下
<测试::csdn name=博客>
也是一个学习的好地方
</测试::cnblog>或者<测试::cnblog name=博客>
也是一个学习的好地方
</测试::cnblog>> 能够判断结构不正确其次我要求能够获取以下内容
1. 测试1::csdn url=bbs (标签属性)
这是我经常上的bbs论坛 (标签文本内容)
这是一个注释行(注释行)2. 测试2::cnblog name=博客
也是一个学习的好地方
这还是一个注释行
3.换个名字::sina class=新闻
看看新闻吧
最后一个例子
其实主要是保证从开头匹配注释行,这个要看需求了,如果不一定非是从行首开始,可以去掉(?<=^|\n)这一限制
你提供的两个正则表达式好像都没有正确获取数据啊
我还是直接用hch126163的字符串
string str = "//***********注释行1<xml:tag id=asdf>asdfsa1111</xml:tag> //***********注释行2这两部分内容啊?<xml:tag id=as>asdfsa2222</xml:tag>";
你这里都没换行,全都是注释,怎么可能有匹配
string str = "//***********注释行1\n<xml:tag id=asdf>\nasdfsa1111\n</xml:tag> \n//***********注释行2这两部分内容啊?\n<xml:tag id=as>\nasdfsa2222\n</xml:tag>";
Regex reg = new Regex(@"(?is)(?<=^|\n)(//[^\n]+)\n(<(\S+)[^>]*>.*?</\3>)");
MatchCollection mc = reg.Matches(str);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups[1].Value + "\n-------------------------\n";
richTextBox2.Text += m.Groups[2].Value + "\n=========================\n";
}
嗯,能正确取出数据,但是还是不能校验结构 string str = "<!--文件头--!>\r\n//这是一个注释行\r\n<<测试11::csdn url=bbs>\r\n这是我经常上的bbs论坛\r\n</测试1::csdn>\r\n//这还是一个注释行\r\n<测试2::cnblog name=博客>\r\n也是一个学习的好地方\r\n</测试2::cnblog>\r\n//最后一个例子\r\n<换个名字::sina class=新闻>\r\n看看新闻吧\r\n</换个名字::sina>";不能判断文件结构不正确
非常感谢你的blog,看了一天了,见笑了。以前没有深入用过