/ / R Alles vom Muster bis zum Muster erfassen - Regex, R, Erfassen

R erfassen alles von Muster bis Muster - Regex, R, Capture

Ich versuche, eine Teilzeichenfolge zwischen den beiden Mustern zu extrahieren BB und </p>:

require("stringr")
str = "<notes>n  <p>AA:</p>n   <p>BB: word, otherword</p>n    <p>Number:</p>n    <p>Level: 1</p>n"
str_extract(str, "BB.*?:</p>")

Der extrahierte Teilstring sollte "word, otherword" sein, aber ich fange zu viel ein:

  [1] "BB: word, otherword</p>n    <p>Number:</p>"

Antworten:

2 für die Antwort № 1

Vielleicht so etwas?

> gsub(".*BB: (.*?)</p>.*$", "\1", str)
# [1] "word, otherword"

2 für die Antwort № 2

Dies ist ein Job für reguläre Perl-Ausdrücke. Lookahead und Lookbehind Referenzen. Im stringr Sie können den regulären Ausdruck in a einwickeln perl funktionieren so:

str_extract(str, perl("(?<=BB: ).*?(?=</p>)"))
[1] "word, otherword"

Sie können dies auch mit base tun:

regmatches(str, regexpr(perl("(?<=BB: ).*?(?=</p>)"), str, perl=TRUE))
[1] "word, otherword"