正则表达式捕获一个组,但前提是前面有一个字符串,后面跟着一个字符串
Regex to capture a group, but only if preceded by a string and followed by a string
在 SO 和其他地方有一些 'typical' 问题解决方案的示例,但我们需要稍微不同版本的帮助。
我们有如下字符串
pies
bob likes,
larry likes,
harry likes
cakes
并使用以下正则表达式
(?<=pies\n|\G,\n)(\w+ likes)
只有当字符串以馅饼开头时,我们才能按预期捕获 'nnn likes',但是,如果它不以 'cakes' 结尾,我们还需要捕获失败,并且我们的这样做的尝试失败了。
Link 到正则表达式 101:https://regex101.com/r/uDNWXN/1/
感谢任何帮助。
我建议在开头添加额外的前瞻性,以确保字符串中有 cakes
:
(?s)(?<=\G(?!^),\n|pies\n(?=.*?cakes))(\w+ likes)
查看 regex demo(没有预期的匹配,在最后一行添加一些字符以获得匹配)。
图案详情
(?s)
- DOTALL/singleline 修饰符让 .
匹配任何字符,包括换行符
(?<=
- 正向后视需要紧靠当前位置左侧的以下内容:
\G(?!^),\n
- 在上一场比赛结束后,一个逗号,然后是一个换行符
|
- 或
^pies\n(?=.*cakes)
- 字符串的开头,pies
,换行符后面没有尽可能多的 0+ 个字符,然后是 cakes
字符串
)
- 回顾结束
(\w+ likes)
- 第 1 组:任何一个或多个字母、数字或下划线,然后是 space 和 likes
.
在 SO 和其他地方有一些 'typical' 问题解决方案的示例,但我们需要稍微不同版本的帮助。
我们有如下字符串
pies
bob likes,
larry likes,
harry likes
cakes
并使用以下正则表达式
(?<=pies\n|\G,\n)(\w+ likes)
只有当字符串以馅饼开头时,我们才能按预期捕获 'nnn likes',但是,如果它不以 'cakes' 结尾,我们还需要捕获失败,并且我们的这样做的尝试失败了。
Link 到正则表达式 101:https://regex101.com/r/uDNWXN/1/
感谢任何帮助。
我建议在开头添加额外的前瞻性,以确保字符串中有 cakes
:
(?s)(?<=\G(?!^),\n|pies\n(?=.*?cakes))(\w+ likes)
查看 regex demo(没有预期的匹配,在最后一行添加一些字符以获得匹配)。
图案详情
(?s)
- DOTALL/singleline 修饰符让.
匹配任何字符,包括换行符(?<=
- 正向后视需要紧靠当前位置左侧的以下内容:\G(?!^),\n
- 在上一场比赛结束后,一个逗号,然后是一个换行符|
- 或^pies\n(?=.*cakes)
- 字符串的开头,pies
,换行符后面没有尽可能多的 0+ 个字符,然后是cakes
字符串
)
- 回顾结束(\w+ likes)
- 第 1 组:任何一个或多个字母、数字或下划线,然后是 space 和likes
.