首页 新闻 会员 周边 捐助

正则表达式 查找以某些字符开始,某些字符结束的匹配项

0
悬赏园豆:100 [已关闭问题]

一个字符串里大致内容如下:
!$(P05Y200003630653)
Pol_type~LIFE~~
Resv_desc~列金额加上因红利分配而产生的相关利益。
Resv_desc~上表所列的现金价值不包括因红利分配而产生
Resv_desc~如有未列年度及事项,详见合同条款。
%%EOJ
!$(P05Y200003630653)
Pol_type~LIFE~~
Resv_de
Resv_desc~
Resv_desc~的相关利益。
Resv_desc~如有未列
%%EOJ

想要计算以上串中,以“!$”开始,以“%%EOJ”结束,的数据对的个数。
c#中相应的正则表达式怎么写?自己没想到好的实现方法。
!$(中间部分)%%EOJ

这中间部分有以下要求:
1. 至少包含一个字符,那就涉及到[]+了
2. 使用懒惰匹配模式,找最近的%%EOJ配对。或者写一个表达式保证这个串中不包含%%EOJ的字串。
正则表达式快来帮忙?

任国强的主页 任国强 | 初学一级 | 园豆:30
提问于:2009-06-11 10:51
< >
分享
其他回答(1)
0

^!\$(.+?)%%EOJ$
这样行不行呢?

为了楼主,我重新试了一下.当然,开始我的正则写错了.呵呵.改成:!\$(.+?)%%EOJ
测试代码:
Regex regex = new Regex(@"!\$(.+?)%%EOJ", RegexOptions.Singleline);
string text = @"!$(P05Y200003630653)
Pol_type~LIFE~~
Resv_desc~列金额加上因红利分配而产生的相关利益。
Resv_desc~上表所列的现金价值不包括因红利分配而产生
Resv_desc~如有未列年度及事项,详见合同条款。
%%EOJ
!$(P05Y200003630653)
Pol_type~LIFE~~
Resv_de
Resv_desc~
Resv_desc~的相关利益。
Resv_desc~如有未列
%%EOJ";
Response.Write(regex.IsMatch(text).ToString());
if (regex.IsMatch(text)) {
MatchCollection matches = regex.Matches(text);
Response.Write("<br />" + matches.Count.ToString());
}

输出:
True
2

I,Robot | 园豆:9783 (大侠五级) | 2009-06-11 11:58
0

!\$(.+?)%%EOJ即可,注意要启用正则的单行模式

在C#中统计并返回数据对个数的代码是:

var input = @"!$(P05Y200003630653)
Pol_type~LIFE~~
Resv_desc~列金额加上因红利分配而产生的相关利益。
Resv_desc~上表所列的现金价值不包括因红利分配而产生
Resv_desc~如有未列年度及事项,详见合同条款。
%%EOJ
!$(P05Y200003630653)
Pol_type~LIFE~~
Resv_de
Resv_desc~
Resv_desc~的相关利益。
Resv_desc~如有未列
%%EOJ";
            var r = new System.Text.RegularExpressions.Regex(@"!\$(.+?)%%EOJ", System.Text.RegularExpressions.RegexOptions.Singleline);
            return r.Matches(input).Count;

 

斯克迪亚 | 园豆:4124 (老鸟四级) | 2009-06-11 14:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册