Я бы согласился, что использование пакета, созданного для обработки html, вероятно, лучший способ справиться с примером, который вы приводите. Однако один из возможных способов подстроки строки, основанной на символьных значениях, заключается в следующем.
Шаг 1: Определите простую функцию для возврата к позиции символа в строке, в этом примере я использую только строки фиксированных символов.
strpos_fixed=function(string,char){
a<-gregexpr(char,string,fixed=T)
b<-a[[1]][1:length(a[[1]])]
return(b)
}
Шаг 2: Определите вашу новую функцию подстроки, используя функцию strpos_fixed () , которую вы только что определили
char_substr<-function(string,start,stop){
x<-strpos_fixed(string,start)+nchar(start)
y<-strpos_fixed(string,stop)-1
z<-cbind(x,y)
apply(z,1,function(x){substr(string,x[1],x[2])})
}
Шаг 3: Тест
htmlcode = " some html code <H1>headline</H1> some other code <H1>headline2</H1> "
htmlcode2 = " some html code <H1>baa dee ya</H1> some other code <H1>say do you remember?</H1>"
htmlcode3<- "<x>baa dee ya</x> skdjalhgfjafha <x>dancing in september</x>"
char_substr(htmlcode,"<H1>","</H1>")
char_substr(htmlcode2,"<H1>","</H1>")
char_substr(htmlcode3,"<x>","</x>")