首页 > 解决方案 > 正则表达式,如何返回标题中存在的一组单词?

问题描述

在下面的示例中,正确的结果是只返回 id 9 到 15 之间的标题吗?我得到的最接近的是:

((^| )(FED[AZ]*|(ESC[AZ]*)|(AGRO[AZ]*)|(CENT[AZ]*)|(CTR[AZ]*)|(INST[AZ]* )|(EDUC[AZ]*)|(SCI[AZ]*)|(TEC[AZ]*))(|$))

注意:FED [AZ] * 参数必须始终与列出的至少一个术语组合出现。包含词 UNIV [AZ] * 的标题必须返回 false。

ID 文本 当前回报 预期收益
1 INST NACL 伴侣 PURA 真的 错误的
2 PARA FED UNIV, TOXICOL LAB 真的 错误的
3 CTR, BR12020330 TAUBATE 真的 错误的
4 维森特林哈雷斯街 真的 错误的
5 阿尔伯特爱因斯坦大街 真的 错误的
6 REG TECN 犯罪分子 真的 错误的
7 纳西门托·卡斯特罗大街 真的 错误的
8 SAO PAULO FED UNIV, COLL AGR SCI, DEPT CROP SCI, BOTUCATU, SP, 巴西 真的 错误的
9 INST FED CIENCIA TECNOL SUL MINAS, CAMPUS POCOS DE CALDAS 真的 真的
10 INST FED EDUC PERNAMBUCO IFPE, RECIFE 真的 真的
11 INST FED MINAS GERAIS, CAMPUS CONGONHAS 真的 真的
12 INST FED ECN TECNOL NORTE MINAS 真的 真的
13 CTR FED EDUC TECNOL OURO PRETO 真的 真的
14 FED INST AMPUS GARANHUNS 真的 真的
15 INST FED 巴西百南布哥 错误的 真的

更多示例:https ://regex101.com/r/reVgya/1

标签: regex

解决方案


您可以使用

WHERE col RLIKE '^(?!.*\\bUNIV\\b)(?=.*\\bFED\\b).*\\b(FED|ESC|AGRO|CIE|CENT|CTR|CRT|INST|EDUC|SCI|TEC)\\b'

这是正则表达式演示

详情

  • ^- 字符串的开始
  • (?!.*\bUNIV\b)- 负前瞻检查:字符串中必须没有UNIV整个单词
  • (?=.*\bFED\b)- 积极的前瞻检查:字符串中必须有一个FED完整的单词
  • .*\b(FED|ESC|AGRO|CIE|CENT|CTR|CRT|INST|EDUC|SCI|TEC)\b- 在除换行符之外的任何零个或多个字符之后,替换列表中必须有一个完整的单词。

推荐阅读