1 regex language-agnostic vbscript
我有一个句子(用空格分隔的单词)。
然后我有两个短语列表(完整或部分单词,即不包含空格):一个是“包含”列表,另一个是“排除”列表。
匹配的句子将包含“包含”列表中的所有短语(可以重叠,不区分大小写)并且不包含“排除”列表中的任何短语。
如何测试句子是否符合规则?谢谢。
例子
句子 = This yammy Flybe catalog is sticky
包括列表 = cat fly tic
排除列表 = veg pot yam
测试失败,因为尽管所有“包含”短语都在句子中,yam但确实出现了“排除”短语之一 ( )。将单词更改yammy为yummy,测试应该通过。
PS目前为此使用SQL中的关系划分实现,当SQL数据库中的数据领先时,这似乎得到了很好的优化。现在我有一个来自外部来源的数据结构。我想我可以传入分隔的字符串,拆分为表格行等,但我想研究其他选项。那么,如果不是正则表达式,那又如何?
虽然我认为这对正则表达式来说不是一件好事,但当正则表达式是您选择的技术时,您可以考虑以下方面的事情(负前瞻和正前瞻,锚定在开头):
^(?=.*include1)(?=.*include2)(?=.*...)(?!.*(?:exclude1|exclude2|...))
Run Code Online (Sandbox Code Playgroud)
Regex.Escape在将它们添加到 include 或 exclude 表达式之前,请确保在单个句子上使用。正则表达式的工作原理如下:
include1在匹配字符串中,则成功,如果不在,则失败并include2在匹配字符串中,则成功,如果不在,则失败并includeX在匹配字符串中,则成功,如果不在,则失败并exclude1在匹配的字符串中,则失败或exclude2在匹配的字符串中,则失败或excludeX在匹配字符串中,则失败。换句话说:所有包含句子必须在(以任何顺序),所有排除句子必须在外面。
注意:这种类型的正则表达式,即使经过编译,也没有被 .NET 正则表达式引擎很好地优化。如果包含/排除列表变大,那么简单的串联例程可能已经非常昂贵。最后,替代方案(逐个匹配单个句子)可能更慢。要找出答案,请衡量任一方法的性能。
更新:修复了代码中的错误并添加了解释。
| 归档时间: |
|
| 查看次数: |
2175 次 |
| 最近记录: |