首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

[]正则表达式截取字符串

2012-12-14 
[求助]正则表达式截取字符串我有这样一个字符串:***适用规定***2、适用范围:XXXXX。3、适用客票:BSP ET票/本

[求助]正则表达式截取字符串
我有这样一个字符串:
***适用规定***                                                                  
2、适用范围:XXXXX。                                                       
3、适用客票:BSP ET票/本票ET票/B2B ET票。                                       
4、签    转、OPEN  票、RQ票:不允许。                                           
5、改期:不允许。                                                               
6、客票需按顺序使用。                                                           
7、退票:                                                                       
(1)自愿退票:                                                                 
?客票完全未使用:扣除50%退票费。                                               
?客票已部分使用:需补齐已使用航段Y舱公布运价。                                 
(2)非自愿退票                                                                 
?客票全部未使用:不收取退票费。                                                


?客票已部分使用:扣除60%票面价,余额退还旅客。      
8、子舱位变更、升舱:按自愿退票处理。                                           
9、所有其它种类折扣:不适用。    

想通过正则表达式得到以下结果:
自愿退票:                                                                 
?客票完全未使用:扣除50%退票费。                                               
?客票已部分使用:需补齐已使用航段Y舱公布运价。   

请问该如何实现?
说明:可以用[自愿退票]开始截取,这个一定是有的,但关键在于[非自愿退票]这个未必有,文字的标题和序号也是不固定的,该如何实现?刚开始想用数字加[、]来实现的:(自愿退票{0,1}(\w(.|\n)*)(\s\d[、])),结果没整成,求教各位...急用啊...        

[最优解释]
必须要有退出条件才行
以下是按照遇到空行,或者遇到包含“非自愿退票”行作为退出条件来匹配的

Regex reg = new Regex(@"(?m)自愿退票.*$\n(^(?!\s*$)((?!非自愿退票).)+$\n)+");
Match m = reg.Match(yourStr);
if (m.Success)
{
    richTextBox2.Text = m.Value;
}

[其他解释]
 @"自愿退票(?<=\s*)[\s\S]*?(?=\r\n\s*[((0-9]
[其他解释]
仅对你这段文字而言

            StreamReader reader = new StreamReader("c:\\temp\\1.txt",Encoding.Default);
            string source = reader.ReadToEnd();
            Regex reg = new Regex(@"(?is)自愿退票[^(]+");
            Match mm = reg.Match(source);
            MessageBox.Show(mm.Value);

[其他解释]
引用:
仅对你这段文字而言


C# code?



123456

            StreamReader reader = new StreamReader("c:\\temp\\1.txt",Encoding.Default);             string source = reader.ReadToEnd();             Regex reg =……

不能用[(],因为[(2)非自愿退票]这个子标题未必存在,也可能有,也可能没有... ...
[其他解释]

  string str = File.ReadAllText("D:\\1.txt", Encoding.Default);
            str = Regex.Match(str, @"自愿退票(?<=\s*)[\s\S]*?(?=\r\n\s*[((0-9])").Value;


[其他解释]

引用:
C# code?



1234

  string str = File.ReadAllText("D:\\1.txt", Encoding.Default);             str = Regex.Match(str, @"自愿退票(?<=\s*)[\s\S]*?(?=\r\n\s*[((0-9])").Value;


测试成功了 多谢楼上!
[其他解释]
引用:
引用:
C# code?



1234

  string str = File.ReadAllText("D:\\1.txt", Encoding.Default);             str = Regex.Match(str, @"自愿退票(?<=\s*)[\s\S]*?(?=\r\n\s*[((0-9])").Value;

测试成功……

再补充下:
如果遇到这种情况该如何?后面什么内容都没有的
***适用规定***                                                                  
2、适用范围:国航常旅客。                                                       
3、适用客票:BSP ET票/本票ET票/B2B ET票。                                       
4、签    转、OPEN  票、RQ票:不允许。                                           
5、改期:不允许。                                                               
6、客票需按顺序使用。                                                           
7、退票:                                                                       
(1)自愿退票:                                                                 
?客票完全未使用:扣除50%退票费。                                               


?客票已部分使用:需补齐已使用航段Y舱公布运价。                                 
          
[其他解释]
$)

热点排行