2016-09-26 3 views
2

У меня есть строкаRegex для извлечения из строки в R

string = <td class=\"title\"><a href=\"/title/tt0075669/\">Amar Akbar Anthony</a><div class=\"desc_preview\" title=\"10/10&#10;votes 2\"> </div>\n</td> 

Я использую код

library(stringr) 
str_extract(string,"[A-Z]\\w+") 

Для этого я получаю результат

> str_extract(string,"[A-Z]\\w+") 
[1] "Amar" 

Однако я хочу " Amar Akbar Anthony "в качестве моего выхода. Как мне поменять мое регулярное выражение для этого?

+3

Добавить пробел - ' "[A-Z] [\\ ш \\ s] +"' –

+1

Это именно то, что я хотел –

ответ

1

Обратите внимание, что ваше регулярное выражение не допускает пробелов. Добавьте его в [\\w\\s]:

"[A-Z][\\w\\s]+" 

Кроме того, если ваша строка всегда в формате выше, вы даже не нуждаются в stringr библиотеку используйте базовый R gsub:

s <- "<td class=\"title\"><a href=\"/title/tt0075669/\">Amar Akbar Anthony</a><div class=\"desc_preview\" title=\"10/10&#10;votes 2\"> </div>\n</td>" 
trimws(gsub("<[^>]+>","",s)) 
[1] "Amar Akbar Anthony" 

См this online demo. gsub("<[^>]+>","",s) удалит все открытые/закрытые/etc. теги.

Или использовать XML разборе библиотеки, чтобы захватить значения a тегов:

> library("XML") 
> s <- "<td class=\"title\"><a href=\"/title/tt0075669/\">Amar Akbar Anthony</a><div class=\"desc_preview\" title=\"10/10&#10;votes 2\"> </div>\n</td>" 
> parsed_doc = htmlParse(s, useInternalNodes = TRUE) 
> res <- getNodeSet(doc = parsed_doc, path = "//a/text()") 
> plain_text <- sapply(res, xmlValue) 
> plain_text 
[1] "Amar Akbar Anthony" 
5

EDIT: Огонь! Я неправильно понял ваш вопрос. Способ, которым я обычно извлекаю материал из двух HTML-тегов, заключается в использовании положительного lookbehind на «>», затем читайте все до следующего «<».

string = "<td class=\"title\"><a href=\"/title/tt0075669/\">Amar Akbar Anthony</a><div class=\"desc_preview\" title=\"10/10&#10;votes 2\"> </div>\n</td>" 

str_extract(string,"(?<=>)[^<]+") 

Это немного хрупкий. Лучший ответ: вы не используете регулярные выражения для анализа HTML. (htmlTreeParse() из XML library является один подход, а httr package также имеет функцию для этого.)

Мой первоначальный ответ, чтобы извлечь все слова в виде списка:

Переход от str_extract() к str_extract_all()

str_extract(string,"[A-Z]\\w+") 
[1] "Amar" 

str_extract_all(string,"[A-Z]\\w+") 
[[1]] 
[1] "Amar" "Akbar" "Anthony" 
Смежные вопросы