哪些正则表达式代码可以让我提取这个特定的文本?

Which regex codes would allow me to extract this specific text?

我正在 R 中使用 stringr 库。我的 R 代码摘录如下所示:

library(stringr)

...

hotelname <- url %>% html_nodes(xpath = './/*[@id="hp_hotel_name"]')  %>% 
html_text()

以上代码给出了以下输出:

"\nHotel\nCove Boutique Hotel (Adults Only)\n"

我只需要提取第二部分:“海湾精品酒店(仅限成人)

我尝试了以下方法,但没有用:

hotelname2 <- str_extract_all(hotelname, "(?<=[A-Z]\n)([^\n]*)")

知道我上面的正则表达式代码有什么问题吗?

是否要提取 \n\n 之间的文本?

hotelname <- "\nHotel\nCove Boutique Hotel (Adults Only)\n"
sub('.*\n(.*)\n', '\1', hotelname)

[1] "Cove Boutique Hotel (Adults Only)"

Trim 末尾的 \n 空格,然后删除包括 \n

在内的所有内容
x <- "\nHotel\nCove Boutique Hotel (Adults Only)\n"
sub(".*\n", "", trimws(x))
## [1] "Cove Boutique Hotel (Adults Only)"

或扫描\n分隔的字段并取第二个:

scan(text = x, what = "", sep = "\n", quiet = TRUE)[2]
## [1] "Cove Boutique Hotel (Adults Only)"

或使用 trimws 然后 readLines:

readLines(textConnection(trimws(x)))[2]
## [1] "Cove Boutique Hotel (Adults Only)"

如果您无论如何都在使用 stringr,一个不错的功能是 str_squish(),它可以删除所有空格和换行符等。

hotelname2 <-  str_squish(hotelname)

我经常在抓取时直接通过管道输入:

hotelname <- url %>% html_nodes(xpath = './/*[@id="hp_hotel_name"]')  %>% 
html_text() %>% str_squish

或者,您可以将 str_extract 与前瞻和后视正则表达式结合使用以获得所需的结果

hotelname <- "\nHotel\nCove Boutique Hotel (Adults Only)\n"

hotelname2 <- str_extract(hotelname, "(?<=Hotel\n).*(?=\n)")

此处,“?<= 告诉代码在“Hotel\n”之后查找文本,“?=”告诉它在“\n”之前查找文本。我们在 return 两个匹配项之间的所有内容之间添加“.*”。