求一个正则表达式!!!!

夜半吸血鬼 2012-05-31 11:20:07
需求如下:


需要匹配的字符串格式如下:

<itemTemplate>
{Bingding Name}
<Repeater source="{ViewData StudySourse}" id="ReSourse" eventargs="">
{Bingding Name}
</Repeater>
{Binding CreateTime}
</itemTemplate>

现在我要一个正则表达式来匹配<itemTemplate>下面的{Binding XXX}格式的字符串
并且需要排除掉
<Repeater>
{Bingding Name}
</Repeater>

这么一部分,就是需要排除掉<Repeater>标签内和本身<Repeater>的元素

最终需要的结果是{Bingding Name} "\{Binding\s+(?<Property>\w+)\}" 此类型的
...全文
236 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
夜半吸血鬼 2012-06-01
  • 打赏
  • 举报
回复
现在我还有一个正则表达式也希望大神们能帮助我解决一下。
我的正则表达式如下:
\<(?<Control>(listView))(\s+(?<AttributeName>\w+)\s*=\s*""(?<AttributeValue>[^>""]*)"")*\s*\>\s*(\s*\<(?<ParameterName>\w+)\>(?<ParameterValue>[\s\S]*)\</\k<ParameterName>\>\s*)*\s*\</\k<Control>\>

需要匹配的格式如下:

<ul>
<Repeater source="{ViewData People}" id="RePeople" eventargs="">
<itemTemplate>
<li>姓名: {Binding Name},编号: {Binding Id}</li>



<Repeater source="{ViewData StudySourse}" id="ReSourse" eventargs="" >
<itemTemplate>
  <li>编号:{Binding Id},课程名称:{Binding Name},分数:{Binding Fraction}</li>
</itemTemplate>
</Repeater>


</itemTemplate>
</Repeater>
</ul>


执行代码:

//次代码解析 将在请求生成页面时开始
aspxHtml = ControlsParser.Replace(aspxHtml, delegate(Match CurrentMatch)
{
SettingsDicitonary settings =SettingsDicitonary.GetSettings(CurrentMatch);
EvaluateControl EControl = new EvaluateControl(CurrentMatch.Groups["Control"].Value.ToString(), settings.Attributes, settings.Parameters, CurrentMatch.Value);
return EControl.Analyze();
});


如上的正则表达式在第一次的时候可以匹配出<Repeater> 能获取出来CurrentMatch.Groups["Control"].Value 是Repeater

但在循环第二次匹配的时候就 获取不了CurrentMatch.Groups["Control"].Value 了 取得的是 “”的
第二次需要匹配的格式如下:
<% Type RePeople_Type = RePeople_Item.GetType(); %>

<li>姓名: <%= RePeople_Type.GetProperty("Name").GetValue(RePeople_Item,null) %>,编号: <%= RePeople_Type.GetProperty("Id").GetValue(RePeople_Item,null) %></li>



<listview source="{ViewData StudySourse}" id="ReSourse" eventargs="" >
<itemTemplate>
  <li>编号:{Binding Id},课程名称:{Binding Name},分数:{Binding Fraction}</li>
</itemTemplate>
</listview>





但在第二次匹配的时候
夜半吸血鬼 2012-06-01
  • 打赏
  • 举报
回复
3楼回答正确,+1
  • 打赏
  • 举报
回复
string tempStr = File.ReadAllText(@"C:\Documents and Settings\Administrator\桌面\Test.txt", Encoding.GetEncoding("GB2312"));//读取tx

string pattern = @"<Repeater[^>]*?>[\s\S]*?</Repeater>|<[^>]*?>";
tempStr = Regex.Replace(tempStr,pattern,string.Empty);
夜半吸血鬼 2012-06-01
  • 打赏
  • 举报
回复
各位是否我写的不明确,, 我不获取所有的{Binddin xxxx} 这是不包含<Repeater>里面的{binding xxxx}


夜半吸血鬼 2012-06-01
  • 打赏
  • 举报
回复
各位大哥不对啊,没有排除掉。。。。。
q107770540 2012-05-31
  • 打赏
  • 举报
回复
(?is)(?<!</?Repeater>.*?)\{Binding\s+(?<Property>\w+)\}
bdmh 2012-05-31
  • 打赏
  • 举报
回复
只针对提问中的内容

Regex reg = new Regex(@"(?is){Bingding[^}]*?}(?![\s]+</Repeater>)");
MatchCollection mc = reg.Matches(source);

foreach (Match m in mc)
{
MessageBox.Show(m.Value);
}
v_yao 2012-05-31
  • 打赏
  • 举报
回复
不懂,不会

62,052

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧