Фильтр строк с использованием регулярного выражения - PullRequest
0 голосов
/ 11 октября 2019

Я хочу использовать регулярные выражения, чтобы найти количество строк в текстовом файле, которые отвечают всем следующим требованиям.

  • Длина 3
  • Изготовлены из всехзаглавные буквы
  • Первый символ НЕ является 'A'
  • Второй символ НЕ является 'J'
  • Третий символ НЕ является 'K'

Я начал с этого: /[A-Z]{3}/, но по некоторым причинам это также соответствует строчным 3-буквенным строкам.

Возможно ли это? Любое руководство приветствуется.

Ответы [ 3 ]

2 голосов
/ 11 октября 2019

Вам нужно привязать регулярное выражение, чтобы оно соответствовало всей строке. В противном случае он будет соответствовать строке длиной более 3, но содержит 3 заглавные буквы вместе в любом месте.

Вы можете использовать наборы символов для каждого символа.

/^[B-Z][A-IK-Z][A-JL-Z]$/

^ совпаденийначало строки. [B-Z] соответствует любой заглавной букве, которая не A, [A-IK-Z] соответствует любой букве, кроме J, а [A-JL-Z] соответствует любой букве, кроме M. $ соответствует концу строки.

1 голос
/ 11 октября 2019

Другое решение с использованием lookahead:

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

Демонстрация и объяснение

0 голосов
/ 11 октября 2019

Попробуйте следующее, чтобы вернуть все совпадения: /\b(?=[A-Z])[^A](?=[A-Z])[^J](?!=[A-Z])[^K]\b/g

Он использует упреждения и вернет только 3-буквенные совпадения и может быть относительно легко повторяем для любых других вариантов A, J, K * 1004. *

Демо: https://regex101.com/r/5s2Gkj/1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...