Извлекать имена из текста - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь извлечь список имен игроков в регби из строки.Строка содержит всю информацию из таблицы, содержащую заголовки (названия команд), а также имя игрока в каждой позиции для каждой команды.У него также есть рейтинг игроков, но мне все равно.

Обратите внимание, цифры от 1 до 15 обозначают позиции, и за каждой позицией всегда стоят два имени (домашний игрок и игрок на выезде).

Вот строка:

"Team Sheets     #            LIO Lions      RPI             JAG Jaguares      RPI     1        Dylan Smith     83           Juan Pablo Zeiss     59     2        Malcolm Marx     90           Julian Montoya     73     3        Carlu Sadie     78           Enrique Pieretto Heilan     54     4        Ruan Vermaak     72           Guido Petti Pagadizaval     77     5        Rhyno Herbst     72           Matias Alemanno     67     6        Marnus Schoeman     82           Juan Manuel Leguizamon     58     7        Vincent Tshituka     64           Marcos Kremer     55     8        Kwagga Smith     88           Rodrigo Bruni     62     9        Ross Cronje     74           Martin Landajo     52     10        Elton Jantjies     80           Joaquin Diaz Bonilla     62     11        Courtnall Skosan     76           Emiliano Boffelli     75     12        Franco Naude     52           Bautista Ezcurra     66     13        Wandisile Simelane     73           Matias Moroni     75     14        Sylvian Mahuza     76           Sebastian Cancelliere     65     15        Andries Coetzee     73           Joaquin Tuculet     68      Substitutes      #            LIO Lions      RPI             JAG Jaguares      RPI     16        Pieter Jansen     58           Gaspar Baldunciel     61     17        Nathan McBeth     60           Santiago Garcia Botta     65     18        Frans van Wyk     58           Santiago Medrano     72     19        Stephan Lewies     81           Tomas Lavanini     68     20        James Venter     61           Tomas Lezana     62     21        Dillon Smit     61           Tomas Cubelli     63     22        Harold Vorster     69           Juan Cruz Mallia     66     23        Gianni Lombard     64           Ramiro Moyano     78"

Итак, в основном я хочу просто список имен с названиями команд в качестве заголовков, например

Lions            Jaguares

Dylan Smith      Juan Pablo Zeiss
Malcolm Marx     Julian Montoya
...              ...

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Хотя я согласен с комментарием RS о прямом считывании данных как данных, вот мое решение с использованием регулярных выражений:

# build a "player name - RPI" pattern
pattern = "[a-zA-Z]+(\\s[a-zA-Z]+)+\\s+\\d{1,2}"

# find all matches in string
m = gregexpr(pattern, x)

# extract all matches from string
plyrs = regmatches(x, m)[[1]]

# build dataframe
data.frame(lions = plyrs[c(TRUE, FALSE)],
           jaguares = plyrs[c(FALSE, TRUE)],
           stringsAsFactors=FALSE)
0 голосов
/ 26 марта 2019

Прежде всего, вы можете попытаться создать структуру таблицы вместо огромной длинной строки.Нечто подобное может дать вам небольшой старт.

data = 'Team Sheets     #            LIO Lions      RPI             JAG Jaguares      RPI     1        Dylan Smith     83           Juan Pablo Zeiss     59     2        Malcolm Marx     90           Julian Montoya     73     3        Carlu Sadie     78           Enrique Pieretto Heilan     54     4        Ruan Vermaak     72           Guido Petti Pagadizaval     77     5        Rhyno Herbst     72           Matias Alemanno     67     6        Marnus Schoeman     82           Juan Manuel Leguizamon     58     7        Vincent Tshituka     64           Marcos Kremer     55     8        Kwagga Smith     88           Rodrigo Bruni     62     9        Ross Cronje     74           Martin Landajo     52     10        Elton Jantjies     80           Joaquin Diaz Bonilla     62     11        Courtnall Skosan     76           Emiliano Boffelli     75     12        Franco Naude     52           Bautista Ezcurra     66     13        Wandisile Simelane     73           Matias Moroni     75     14        Sylvian Mahuza     76           Sebastian Cancelliere     65     15        Andries Coetzee     73           Joaquin Tuculet     68      Substitutes      #            LIO Lions      RPI             JAG Jaguares      RPI     16        Pieter Jansen     58           Gaspar Baldunciel     61     17        Nathan McBeth     60           Santiago Garcia Botta     65     18        Frans van Wyk     58           Santiago Medrano     72     19        Stephan Lewies     81           Tomas Lavanini     68     20        James Venter     61           Tomas Lezana     62     21        Dillon Smit     61           Tomas Cubelli     63     22        Harold Vorster     69           Juan Cruz Mallia     66     23        Gianni Lombard     64           Ramiro Moyano     78'
import re
data = re.sub(r'(\s)\1{1,}', r'\1', data)
data = re.sub(r'RPI\s(\d+)', r'\n\1', data)
data = re.sub(r'(#)\s', r'\n\1', data)
print(re.sub(r'\d+\s(\d+)', r'\n\1', data))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...