如何防止在多行正则表达式中捕获这些不需要的行?

时间:2015-03-25 20:26:56

标签: .net regex

这是我的文字结构

@2015
CSV,,,,,sfs,sdf,s,,ssdf,sf

@2015
ABC|@##%@
BCD|||asdf|45d|t
DEF|||sdfgs|45d|t
EFG|||assdfgdf|45d|t


@2015
ABC|@##%@
ZXY|zz|rwe2342345|unwanted|

--------------

@2015
CSV,,,,,sfs,sdf,s,,ssdf,sf

@2015
ABC|@##%@
BCD|||asdf|45d|t
DEF|||sdfgs|45d|t
EFG|||assdfgdf|45d|t


@2015
ABC|@##%@
ZXY|zz|rwe2342345|wanted|

--------------

@2015
CSV,,,,,sfs,sdf,s,,ssdf,sf

@2015
ABC|@##%@
BCD|||asdf|45d|t
DEF|||sdfgs|45d|t
EFG|||assdfgdf|45d|t


@2015
ABC|@##%@
ZXY|zz|rwe2342345|unwanted|

到目前为止我的RegEx

CSV(.*\n)+?ZXY.*\|wanted\|

使用TextCrawler我得到了这个结果(找到了1个结果)它包含了不需要的组。

1) CSV,,,,,sfs,sdf,s,,ssdf,sf

@2015
ABC|@##%@
BCD|||asdf|45d|t
DEF|||sdfgs|45d|t
EFG|||assdfgdf|45d|t


@2015
ABC|@##%@
ZXY|zz|rwe2342345|unwanted|

--------------

@2015
CSV,,,,,sfs,sdf,s,,ssdf,sf

@2015
ABC|@##%@
BCD|||asdf|45d|t
DEF|||sdfgs|45d|t
EFG|||assdfgdf|45d|t


@2015
ABC|@##%@
ZXY|zz|rwe2342345|wanted|  

我真的只想捕获从CSV到包含字符串| want |的ZXY行的组(非贪婪的比赛)。如何修改我的正则表达式来实现这一目标?我正在使用.Net正则表达式。

编辑:预期结果是一个像这样的文本块

CSV,,,,,sfs,sdf,s,,ssdf,sf

@2015
ABC|@##%@
BCD|||asdf|45d|t
DEF|||sdfgs|45d|t
EFG|||assdfgdf|45d|t


@2015
ABC|@##%@
ZXY|zz|rwe2342345|wanted|

1 个答案:

答案 0 :(得分:2)

这应该这样做:

CSV((?!\-{14})[\s\S])*?\|wanted\|

Demo

((?!\-{14})[\s\S])*?基本上表示任意数量的字符前面没有14个破折号(这里是部分分隔符)。它是预测交易的负面前瞻(?!\-{14})