我只需要匹配两个单词(“ ham”或“ turkey”)的第一个实例,只要其中一个单词在单词“ sandwich”之后,并且在“ sandwich”和(“ ham”或“火鸡”)。

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))?仍然与第二句匹配。我该如何修改正则表达式以使其与第二句不匹配。提前致谢!

最佳答案

您可以使用

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


请参见regex demo


sandwich-与子字符串sandwich匹配
((?:(?!forbidden).)*?)-组1匹配不以forbidden字开头的所有字符,零次或多次,尽可能少
(ham|turkey)-hamturkey


您可以根据自己的情况考虑以下几种变化:


如果需要在ham之后匹配turkey和/或sandwich,请使用sandwich((?:(?!forbidden).)*?)(ham|turkey)(.*?)(ham|turkey)
如果只需要匹配ham,然后匹配turkeyturkey,然后匹配ham,则可以在上述正则表达式sandwich((?:(?!forbidden).)*?)(ham|turkey)(.*?)(?!\2)(ham|turkey)中添加否定的前瞻。

关于python - 正则表达式:抢占单词的第一个实例,除非介于两者之间的“禁止”单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44853047/

10-09 22:01