R захват строки в скобках - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь разобрать некоторые из моих шахматных данных pgn, но у меня возникают проблемы с захватом символов только в одной скобке.

testString <- '[Event \"?\"]\n[Site \"http://www.chessmaniac.com play free chess\"]\n[Date \"2018.08.25\"]\n[Round \"-\"]\n[White \"NothingFancy 1497\"]\n[Black \"JR Smith 1985\"]\n[Result \"1-0\"]\n\n1.'

#Attempt to just get who white is, which is inside a bracket [White xxx]

findWhite <- regexpr('\\[White.*\\]', tempString)

regmatches(tempString, findWhite)

Пакет stringr, кажется, делает то, что я хочу, но мне интересно, что отличает использование одного и того же регулярного выражения. Я хорошо использую stringr, но мне также нравится знать, как это сделать в базе R.

library(stringr)
str_extract(tempString, '\\[White.*\\]')

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

По крайней мере, один из способов сделать это в базе R - это использовать sub и оставить только ту часть, которая вам нужна.

sub(".*\\[White\\s(*.*?)\\].*", "\\1", testString)
[1] "\"NothingFancy 1497\""
0 голосов
/ 28 августа 2018

Если вам нужен весь матч, начинающийся с [White и заканчивающийся ], вы можете использовать

regmatches(testString, regexpr("\\[White\\s*[^][]*]", testString))
[1] "[White \"NothingFancy 1497\"]"

Если вам нужна только подстрока внутри двойных кавычек:

regmatches(testString, regexpr("\\[White\\s*\\K[^][]*", testString, perl=TRUE))
[1] "\"NothingFancy 1497\""

См. Демоверсию regex .

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

regmatches(testString, regexpr('\\[White\\s*"\\K.*(?="])', testString, perl=TRUE))
[1] "NothingFancy 1497"

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

подробности

  • \\[ - [ char
  • White - буквальная подстрока
  • \\s* - 0+ пробелов
  • \\K - оператор сброса совпадений отбрасывает сопоставленный текст
  • [^][]* - 0+ символов кроме [ и ]
  • .* (в другой версии) - соответствует любым 0+ символам, кроме символов разрыва строки, как можно большему числу
  • (?="]) - положительный прогноз, соответствующий позиции в строке, за которой сразу следует "].
...