用于捕获组的正则表达式,但前提是前面带有字符串,然后是字符串

问题描述 投票:0回答:1

[在SO和其他地方,有一些解决此问题的“典型”解决方案的示例,但我们需要有关版本稍有不同的帮助。

我们有如下字符串

pies
bob likes,
larry likes,
harry likes
cakes

以及以下正则表达式

(?<=pies\n|\G,\n)(\w+ likes)

[仅当字符串以py开头时,我们才能按预期捕获'nnn likes',但是,如果不以'cakes'结尾,我们还需要捕获失败,并且我们尝试这样做也失败了。

链接到regex101:https://regex101.com/r/uDNWXN/1/

感谢任何帮助。

regex regex-lookarounds regex-group
1个回答
0
投票

[我建议在开头添加额外的前瞻,以确保最后一行不等于cakes

(?s)(?<=\G(?!^),\n|^pies\n(?!.*\ncakes$))(\w+ likes)

请参见regex demo(没有预期的匹配,请在最后一行添加一些字符以进行匹配)。

图案详细信息

  • [(?s)-DOTALL /单行修饰符,以使.匹配任何字符,包括换行符
  • (?<=-向后看是正向,需要在当前位置的左侧立即添加以下内容:
    • \G(?!^),\n-在上一场比赛结束后,先是逗号,然后是换行符
    • |-或
    • [^pies\n(?!.*\ncakes$)-字符串的开始,pies,换行符后跟没有尽可能多的0+字符,然后是换行符,cakes和字符串的末尾
  • )-后面的结尾
  • [(\w+ likes)-组1:任何一个或多个字母,数字或下划线,然后有空格和likes
© www.soinside.com 2019 - 2024. All rights reserved.