首页 > 解决方案 > 正则表达式不匹配断句

问题描述

我想在其他词的上下文中匹配某些词,比如当我们谈论三明治时我想尝试捕捉填充物,我可以这样做:

(?:sandwich|toastie).{0,100}(ham|cheese|pickle)

这将匹配类似的东西Andy sat down to enjoy his sandwich which, unusally for him, was filled with delicious ham

然而,这也将捕获“上下文中断”,例如句末标点符号或换行符,例如Victorians enjoyed a good sandwich after work. They also enjoyed cheese rolling.. 在这种情况下,我想否定匹配,因为它穿过一个句子。

所以我试图这样做(?:sandwich|toastie)(?:\w\. ){0}.{0,100}(ham|cheese|pickle),但这不起作用。我的想象是这样的,[^\w\. ]但这也不对

标签: regex

解决方案


您尝试拒绝示例字符串的方式,您需要使用经过调和的贪婪令牌,而不是您正在编写的方式,并且需要这样编写您的正则表达式,

(?:sandwich|toastie)(?:(?!\w\. ).){0,100}(ham|cheese|pickle)

正则表达式演示

因此,基本上,当您尝试否定(?:\w\. )模式以使匹配失败时,您需要编写(?:(?!\w\. ).)而不是仅编写.which 会使匹配失败,并且这两个括号中的单词不会在两个不同的句子中匹配。


推荐阅读