正则表达式:抓取单词的第一个实例,除非中间有“禁止”单词

2024-04-20 00:32:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要匹配两个单词(“火腿”或“火鸡”)的第一个实例,只要其中一个单词跟在“三明治”后面,并且“三明治”和(“火腿”或“火鸡”)之间没有“禁止”这个单词。你知道吗

reuben sandwich with ham and turkey ham sandwich with cheese
reuben sandwich with forbidden ham and turkey ham sandwich with cheese

我使用的正则表达式仍然与第二句匹配。如何修改regex使其与第二句不匹配。提前谢谢!你知道吗


Tags: and实例with单词regexham火腿cheese
1条回答
网友
1楼 · 发布于 2024-04-20 00:32:43

你可以用

sandwich((?:(?!forbidden).)*?)(ham|turkey)

参见regex demo

  • sandwich-匹配子字符串sandwich
  • ((?:(?!forbidden).)*?)-组1匹配任何没有开始forbidden字的字符,零次或多次,尽可能少
  • (ham|turkey)-要么ham要么turkey。你知道吗

以下是您可以考虑的场景的一些变体:

  • 如果需要在sandwich之后匹配ham和/或turkey,请使用^{}
  • 如果只需要匹配ham然后turkey或者turkey然后ham,可以在上面的正则表达式中添加一个负的lookahead:^{}。你知道吗

相关问题 更多 >