Regex для удаления символа, если за ним следует другой символ в java - PullRequest
2 голосов
/ 18 февраля 2020

Работая с регулярным выражением в java, чтобы найти слова, которые соответствуют приведенным ниже правилам

Правила регулярных выражений:

  1. Слово может начинаться с - ( необязательно Буквы префикса могут быть любыми из этих 'c' 'p''y''r''a''u'
  2. , за которыми следует заглавная T
  3. , за которой следует число от 0 до 9
  4. ( необязательно Суффикс). За ними следуют строчные буквы, которые не включают буквы p или y или r или u. Может быть одна или две буквы

Проблема: Если вышеупомянутый суффикс для слова является a или b или c и сопровождается заглавной буквой N, тогда регулярное выражение должно игнорировать эту букву и то, что следует за ней .Просмотрите тестовые случаи для уточнения.

Тестовые примеры

  1. pT1 c - должны возвращать все слово pT1 c (поскольку N не следует за c)
  2. cT4bcN2 - должен возвращать только cT4b (поскольку за c следует N, игнорировать эти две буквы, а остальные, следующие за ними)
  3. cT3cN2 - должны возвращать cT3 (поскольку за c следует N игнорировать эти 2 буквы и остальные, следующие за ними)

Пока у меня есть

[cpyrau] * [T] [0-9X?] [A- oqstv-z] {0,2} ([N])? (? (1) (? = [abc]))

, который работает для первого контрольного примера, но для всех остальных включает буква перед N, если это или c, поэтому я получаю cT4b c и cT3 c для второго и третьего тестовых случаев.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 18 февраля 2020

делает ли это то, что вы ищете?

\b[cpyrau]*T\d(?:(?![a-c]N)[a-oqstv-z]){0,2}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...