正则表达式:抓住第一个单词实例,除非"禁止"

时间:2017-06-30 18:46:05

标签: python regex regex-negation regex-lookarounds regex-greedy

我需要匹配两个单词的第一个实例(" ham"或" turkey"),如果任何一个单词跟在单词"三明治"之后。和#34;禁止"并没有出现在"三明治" ("火腿"或"火鸡")。

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

我使用的正则表达式sandwich(.*?)(?!.*forbidden)(ham)((.*?)(turkey))?仍与第二句匹配。如何修改正则表达式与第二句不匹配。提前谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用

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

请参阅regex demo

  • sandwich - 匹配子字符串sandwich
  • ((?:(?!forbidden).)*?) - 第1组匹配任何未开始forbidden字的字符,零次或多次,尽可能少
  • (ham|turkey) - hamturkey

以下是您可以针对您的方案考虑的一些变体: