首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含“包括”列表和“排除”列表的正则表达式

问包含“包括”列表和“排除”列表的正则表达式
EN

Stack Overflow用户
提问于 2009-12-10 12:11:20
回答 1查看 2.5K关注 0票数 1

我有一个句子(用空格分隔的词)。

然后我有两个短语列表(完整或部分单词,即不包含空格):一个是“包含”列表,另一个是“排除”列表。

匹配的句子将包含“包括”列表中的所有短语(重叠可以,大小写不敏感),而“排除”列表中没有一个短语。

如何检验句子是否符合规则?谢谢。

示例

句子= This yammy Flybe catalog is sticky

包含list = cat fly tic

排除列表= veg pot yam

测试失败是因为,尽管所有的“包括”短语都在句子中,但其中一个“排除”短语(yam)确实出现了。将单词yammy改为yummy,测试就会通过。

P.S.目前在SQL中使用关系除法实现,当SQL数据库中的数据很好的时候,这似乎是很好的优化。现在我有一个来自外部源的数据结构。我想我可以传入分隔字符串,拆分成表行,等等,但是我想研究其他选项。所以如果不是regex,那又怎样?

EN

回答 1

Stack Overflow用户

发布于 2009-12-10 12:23:28

虽然我认为这与正则表达式不是一件好事,但当正则表达式是您选择的技术时,您可以考虑一些类似的东西(消极的向前看和正面的向前看,锚定在开头):

代码语言:javascript
复制
^(?=.*include1)(?=.*include2)(?=.*...)(?!.*(?:exclude1|exclude2|...))

在将单个句子添加到包含表达式或排除表达式之前,请确保对它们使用Regex.Escape。regex的工作方式如下:

如果

  • 在匹配字符串中,则成功,如果include2在匹配字符串中,则失败;如果include2在匹配字符串中,则失败;如果includeX位于匹配字符串中,则成功;如果includeX位于匹配字符串中,则失败;如果H 211H 112H 112如果exclude1在匹配字符串中,则失败;如果H 214/代码>H 115如果exclude2在匹配字符串中,则失败;如果H217/code>H 118如果excludeX在字符串中,则代码失败,代码<220><<<221>代码>
  • ><221>
  • >代码><220代码><<221>代码><

换句话说:所有包括的句子都必须(按任何顺序排列),所有排除的句子都必须退出。

注意:这种类型的正则表达式,即使在编译时,也不是由.NET正则表达式引擎很好地优化的。如果包含/排除的列表变得很大,那么简单的级联例程可能已经非常昂贵。最后,选择(一个接一个地匹配单个句子)可能更慢。要找出答案,请衡量这两种方法的性能。

更新:修正了代码中的错误并添加了解释。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1880570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档