【问题标题】:Regular expression to select group of text/bunch of lines based on specific line of text基于特定文本行选择文本组/行的正则表达式
【发布时间】:2017-06-07 23:09:29
【问题描述】:

我有以下格式的文本

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))

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

【问题讨论】:

  • 按场景(按块)拆分文本并过滤块。
  • 所以你想要以'Given'、'When'和'Then'开头的三行?或者你只是不想要第一个场景(没有@)
  • 并非如此。我希望一切都从 Scenario 开始:直到该块结束。

标签: regex negative-lookahead capture-group


【解决方案1】:

鉴于您的场景总是从新行开始,您可以使用后向搜索来搜索,您可以使用后视搜索来搜索空格,后跟 @ 或字符串结尾来捕获结尾的匹配块。因此,对于您的示例:

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

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

【讨论】:

    【解决方案2】:

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

    (@\V+)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多