使用正则表达式过滤字符串

时间:2019-10-10 21:04:45

标签: regex regex-negation

我想使用正则表达式在文本文件中查找满足以下所有要求的许多字符串。

  • 长度为3
  • 全部用大写字母组成
  • 第一个字符不是'A'
  • 第二个字符不是'J'
  • 第三个字符不是'K'

我从以下内容开始:/[A-Z]{3}/,但是由于某种原因,它也匹配小写的3个字母字符串。

这可能吗?任何指导表示赞赏。

3 个答案:

答案 0 :(得分:2)

您需要锚定正则表达式,使其与整行匹配。否则,它将匹配一个大于3的字符串,但其中任何位置都包含3个大写字母。

您可以为每个字符使用字符集。

fc1

/^[B-Z][A-IK-Z][A-JL-Z]$/ 匹配行的开头。 ^匹配非[B-Z]的任何大写字母,A匹配除[A-IK-Z]以外的任何字母,J匹配除[A-JL-Z]以外的任何字母。 M与行尾匹配。

答案 1 :(得分:1)

使用前瞻的另一种解决方案:

^(?=[A-Z]{3}$)[^A][^J][^K]$

Demo & explanation

答案 2 :(得分:0)

尝试以下操作以返回所有匹配项:/\b(?=[A-Z])[^A](?=[A-Z])[^J](?!=[A-Z])[^K]\b/g

它具有预读功能,将仅返回3个字母匹配项,并且相对易于重复用于其他任何变体A,J,K

演示:https://regex101.com/r/5s2Gkj/1