Как использовать R для извлечения контекста между двумя символами, сохраняя эти два сигнала? - PullRequest
0 голосов
/ 10 ноября 2019

Например:

a <- 'i am a <> student <>'

Я хочу извлечь или заменить контекст между> и <, сохраняя при этом> и <. Итак, если он извлекается, то результат: </p>

 student 

Если он заменяет его на -, то результат:

'i am a <>--<>'

Я уже пробовал str_extract и str_replace_all, но они не сработали.

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

Так как вы упомянули str_extract и str_replace, мы можем использовать их с регулярным выражением lookahead и lookbehind следующим образом.

library(stringr)

str_extract(a, "(?<=<> ).*(?= <>)")
#[1] "student"

И используя одно и то же регулярное выражение в str_replace

str_replace(a, "(?<=<>).*(?=<>)", "--")
#[1] "i am a <>--<>"
1 голос
/ 10 ноября 2019

Использование sub для замены только одного вхождения:

a <- 'i am a <> student <>'
out <- sub(">[^<]+<", ">--<", a)
out

[1] "i am a <>--<>"

Чтобы извлечь только один контекст:

sub("^.*>\\s*([^<]+?)\\s*<.*$", "\\1", a)

[1] "student"
...