我只需要匹配两个单词(“ 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)
-ham
或turkey
。您可以根据自己的情况考虑以下几种变化:
如果需要在
ham
之后匹配turkey
和/或sandwich
,请使用sandwich((?:(?!forbidden).)*?)(ham|turkey)(.*?)(ham|turkey)
如果只需要匹配
ham
,然后匹配turkey
或turkey
,然后匹配ham
,则可以在上述正则表达式sandwich((?:(?!forbidden).)*?)(ham|turkey)(.*?)(?!\2)(ham|turkey)
中添加否定的前瞻。关于python - 正则表达式:抢占单词的第一个实例,除非介于两者之间的“禁止”单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44853047/