[求助]正则表达式截取字符串
我有这样一个字符串:
***适用规定***
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;
}
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);
string str = File.ReadAllText("D:\\1.txt", Encoding.Default);
str = Regex.Match(str, @"自愿退票(?<=\s*)[\s\S]*?(?=\r\n\s*[((0-9])").Value;
?客票已部分使用:需补齐已使用航段Y舱公布运价。
[其他解释]
$)