Извлечение имени игрока, начиная с начала строки до первого вхождения определенного слова - PullRequest
1 голос
/ 08 мая 2020

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

Я пытаюсь найти имя игрока, который стреляет по мячу. Либо они «делают», либо «пропускают» сразу после своего имени:

D. Rodman makes 2-pt layup  (assist by L. Longley)
M. Jordan misses 2-pt jump shot from 15 ft

Я использовал генератор регулярных выражений и получил большую его часть, но по какой-то причине группа захвата включалась полностью, вплоть до включения m либо в makes, либо в misses. В любом случае, хотелось бы знать, как это сделать с помощью функции поиска, чтобы получить больше опыта с их поведением.

Вот что я пробовал:

(?<=[ makes| misses])[A-Z]\. [A-Z][a-z]+

1 Ответ

2 голосов
/ 08 мая 2020

Вы можете использовать

x <- c("D. Rodman makes 2-pt layup  (assist by L. Longley)",
"M. Jordan misses 2-pt jump shot from 15 ft")
sub("^(.*?)\\s+(?:misses|makes)\\b.*", "\\1", x)
# => [1] "D. Rodman" "M. Jordan"

См. демонстрацию регулярных выражений и R .

Подробности

  • ^ - начало строки
  • (.*?) - Группа 1: любой ноль или более символов, как можно меньше
  • \s+ - 1+ пробелы
  • (?:misses|makes) - misses или makes подстрока
  • \b - граница слова
  • .* - любые символы 0+, до возможно.

stringr решение на основе регулярного выражения выше:

library(stringr)
stringr::str_extract(x, "^.*?(?=\\s+(?:misses|makes)\\b)")

См. демонстрацию R в Интернете . Подробности:

  • ^.*? - начало строки, а затем 0+ символов, кроме символов разрыва строки, как можно меньше
  • (?=\s+(?:misses|makes)\b) - до крайнего левого вхождения 1 + пробелы, а затем misses или makes слов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...