Поймать группу через тире - PullRequest
0 голосов
/ 14 февраля 2019

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

My Document - John Doe - English - Whatever.docx
My Document - Marie-Pierre Smith - French - Whatever.docx

Я хочу поймать John Doe и Marie-Pierre Smith.Имена всегда будут на этой позиции.Вот где я сейчас нахожусь: https://regex101.com/r/zmIoNQ/2

^([\d\w ]*){1} - ([\w ]*){1} - [\d\w -.]*$

1 Ответ

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

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

Обратите внимание, что вы можете опустить эти квантификаторы {1}

^[\d\w ]*- (\w+(?:-\w+)?(?: \w+(?:-\w+)?)?) -

Regex demo

Пояснение

  • ^[\d\w ]*- Сопоставить символы, перечисленные в классе charater, с начала строки, затем сопоставить -
  • ( Начать группу захвата
    • \w+(?:-\w+)? Соответствует 1+ словам слов с необязательной группой для сопоставления - с 1 + символами слов
    • (?: Без захвата
      • \w+(?:-\w+)? соответствует пробелу,Символы 1+ с необязательной частью, соответствующей символам - и 1+
    • )? Закрыть группу и сделать ее необязательной
  • ) Закрыть группу захвата
  • - Соответствовать пробелу и -
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...