哪些正则表达式代码可以让我提取这个特定的文本?
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 两个匹配项之间的所有内容之间添加“.*”。
我正在 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 两个匹配项之间的所有内容之间添加“.*”。