Регулярное выражение: выберите все между первой парой подчеркиваний - PullRequest
0 голосов
/ 11 апреля 2020

Это мой список

record_BANGLADESH_data_1565_803.txt
record_BHUTAN_data_1565_251.txt
record_BRUNEI_data_1565_818.txt
record_CAMBODIA_data_1565_727.txt
record_CHINA PART 1_data_1565_691.txt
record_CHINA PART 2_data_1565_410.txt

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

BANGLADESH
BHUTAN
BRUNEI
CAMBODIA
CHINA PART 1
CHINA PART 2

Я думаю, что заглянуть в будущее команда помогла бы.

Это то, что у меня есть до сих пор:

(?<=_)[^A-Z]+(?=_)

Однако, это заканчивается так:

record_BANGLADESH_803
record_BHUTAN_251
record_BRUNEI_818
record_CAMBODIA_727
record_CHINA PART 1_691
record_CHINA PART 2_410
How can I fix it?

Вот это regex101 с моим кодом

1 Ответ

1 голос
/ 11 апреля 2020

Вы можете сопоставить всю строку и использовать отрицательный символьный класс [^_]+

^[^_]+_([^_]+)_.*$

По частям

  • ^ Начало строки
  • [^_]+_ Соответствует 1+ раз любому символу, кроме _, затем соответствует первому _
  • ( Группа захвата 1
    • [^_]+ Соответствует 1+ раз любому символу, кроме _
  • ) Закрыть группу 1
  • _.* Соответствует второму подчеркиванию с последующим любым символом 0+ раз
  • $ Конец из строки

Regex demo

Вы можете добавить \r\n класс символов [^_], чтобы предотвратить сопоставление новых строк.

In для замены используется первая группа захвата $1

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