正则表达式从字符串中提取R中
问题描述:
string = <td class=\"title\"><a href=\"/title/tt0075669/\">Amar Akbar Anthony</a><div class=\"desc_preview\" title=\"10/10 votes 2\"> </div>\n</td>
我使用的代码
library(stringr)
str_extract(string,"[A-Z]\\w+")
对于这个我得到的结果
> str_extract(string,"[A-Z]\\w+")
[1] "Amar"
但是我想“的字符串阿马尔阿克巴安东尼“作为我的输出。我应该如何改变我的正则表达式呢?
答
请注意,您的正则表达式不允许有空格。其添加为[\\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 votes 2\"> </div>\n</td>"
trimws(gsub("<[^>]+>","",s))
[1] "Amar Akbar Anthony"
见this online demo。 gsub("<[^>]+>","",s)
将删除所有打开/关闭/等。标签。
或者使用XML解析库抢a
标签值:
> library("XML")
> s <- "<td class=\"title\"><a href=\"/title/tt0075669/\">Amar Akbar Anthony</a><div class=\"desc_preview\" title=\"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"
答
编辑:哎呀!我误解了你的问题。我通常从两个HTML标签之间提取东西的方式是在“>”上使用正向倒序,然后读取所有内容,直到下一个“<”。
string = "<td class=\"title\"><a href=\"/title/tt0075669/\">Amar Akbar Anthony</a><div class=\"desc_preview\" title=\"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"
添加一个空格 - ' “[A-Z] [\\ W \\ S] +”' –
这是我想要的到底是什么 –