0

我有以下格式的文本

Scenario: Lorem ipsum dolor sit amet, consectetur adipiscing elit
Given sed do eiusmod tempor
When Ut enim ad minim veniam, quis nostrud exercitation
Then In voluptate velit esse cillum dolore eu fugiat nulla

@Sprint4 @543fsdf
Scenario: Lorem ipsum dolor sit amet, consectetur adipiscing elit
Given sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
When Ut enim ad minim veniam, quis nostrud exercitation
Then In voluptate velit esse cillum dolore eu fugiat nulla

@Sprint1 @345277
Scenario: Sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt returned correct singular message
Given sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
And Duis aute irure dolor in reprehenderit  
When Ut enim ad minim veniam, quis nostrud
Then quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur

@Sprint1 @xyz1234
Scenario: At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis
Given sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
And Duis aute irure dolor in reprehenderit  
When Ut enim ad minim veniam, quis nostrud
Then quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur

我想根据其中的一行文本选择整个场景。

例如。

基于'Given sed do eiusmod tempor incididunt ut labore et dolore magna aliqua'

我想要第二种情况

Scenario: Lorem ipsum dolor sit amet, consectetur adipiscing elit
Given sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
When Ut enim ad minim veniam, quis nostrud exercitation
Then In voluptate velit esse cillum dolore eu fugiat nulla

,也是第三种和第四种情况——但不是第一种

我在尝试

Scenario[\s\S]*?Given sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua[\s\S]*?(?=(@|Scenario))

但这给了我第一个和第二个场景,第三个但没有第四个场景。我也尝试了其他模式,但并不成功。帮助?

4

2 回答 2

0

鉴于您的 Scenario 总是从新行开始,您可以使用后向搜索来搜索它,并且可以使用look-aheat 搜索后面的空格@或字符串的结尾以捕获匹配块的结尾。因此,对于您的示例:

(?<=\s)Scenario.*?[\r\n]+Given sed do eiusmod tempor incididunt ut labore et dolore magna aliqua[\r\n]+.*?(?=\s+@|\s*$)

您没有指定使用的语言,因此您必须进行设置,但从选项(如果不是默认值)中,您需要选择点匹配换行符,并且^$匹配换行符而是整个字符串。

于 2017-06-08T00:09:53.143 回答
0

我不知道是否会有所帮助,但我所做的是将所有行与 @ 匹配,直到行尾。因此,如果是这种情况,您可以将其替换为 null。

(@\V+)

https://regex101.com/r/iCt1j2/1

于 2017-06-08T00:25:45.443 回答