Как исключить подстроку, начинающуюся с '(', если она существует в регулярном выражении? - PullRequest
0 голосов
/ 05 февраля 2019

Регулярное выражение:

([A-Za-z]+),\s([A-Za-z]+)\.\s(.*)[\s\(|\b]

Тестовая строка:

Futrelle, Mrs. Jacques Heath(Lily May Peel)
Heikkinen, Miss. Laina

Скриншот проблемы регулярного выражения:

enter image description here

Ожидается:

  • "Жак Хит" в качестве группы захвата 3 в первой строке
  • "Лайна" в качестве группы захвата 3 во второй строке

Факт:

  • "Жак Хит (Лили Мэй Пил)" в качестве группы захвата 3 в первой строке
  • "Лайна" в качестве группы захвата 3 во второй строке

Изменить:

Получил то, что мне было нужно с некоторой модификацией ответа:

([A-Za-z]+)\,\s*([A-Za-z]+)\.\s*(.*?)(?:\s*\(|$)

См. regex demo :

enter image description here

1 Ответ

0 голосов
/ 05 февраля 2019

Обратите внимание, что (.*)[\s(|\b] сопоставляет и захватывает любые 0+ символов, как можно больше, вплоть до последнего пробела (\s), (, | или символа возврата.[\s(|\b] является положительным символьным классом, где \b не является границей слова, он теряет значение нулевой ширины, а | анализируется как буквенный символ канала.

Вы можете использовать класс отрицанных символов шаблон, [^(]* (или [^(]+):

([A-Za-z]+),\s([A-Za-z]+)\.\s([^(]*)
                             ^^^^^^^

См. Демонстрационную версию regex

Чтобы учестьпеременное количество пробельных символов, вы можете использовать

([A-Za-z]+),\s*([A-Za-z]+)\.\s*([^(]*)
            ^^^             ^^^

, где \s* соответствует 0 или более пробельных символов.

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