读书人

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

发布时间: 2012-12-14 10:33:07 作者: rapoo

[求助]正则表达式截取字符串
我有这样一个字符串:
***适用规定***
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舱公布运价。

[其他解释]
$)

读书人网 >asp.net

热点推荐