一个字符串里大致内容如下:
!$(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的字串。
正则表达式快来帮忙?
^!\$(.+?)%%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
!\$(.+?)%%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;