gpt4 book ai didi

r - R中正则表达式的奇怪行为

转载 作者:行者123 更新时间:2023-12-04 09:33:36 26 4
gpt4 key购买 nike

我有一个简单的网络爬虫,它的行为似乎很奇怪:
- 在 RStudio 的桌面版本(在 Windows 上运行 R 版本 3.3.3)中,它的行为符合预期并产生一个数字向量
- 在 RStudio 的服务器版本(在 Linux 上运行 R 版本 3.4.1)中,gsub() (因此之后的数字转换)失败,代码生成一个向量 NA s。

你知道是什么导致了这种差异吗?

library(rvest)

url <- "http://benzin.impuls.cz/benzin.aspx?strana=3"
impuls <- read_html(url, encoding = "windows-1250")

asdf <- impuls %>%
html_table()

Benzin <- asdf[[1]]$X7

chrBenzin <- gsub("\\sKč","",Benzin) # something is wrong here...

numBenzin <- as.double(chrBenzin)
numBenzin

最佳答案

值中的空格是硬空格,U+00A0 .运行代码后,我得到了 Benzin 的输出(复制/粘贴在 ideone.com):

enter image description here

然后,我已经确定那些是硬空间,但我仔细检查了 here .

当我们有硬空间时,我们应该做的是尝试两种选择。

一种是使用[[:space:]]在 TRE(Base R 函数中的默认正则表达式引擎)中。
另一种是使用带有 (*UCP) 的 PCRE 正则表达式。动词在开始让正则表达式引擎知道我们处理 Unicode。

在您的情况下,在 Linux 上,PCRE 似乎有效,因此您应该坚持使用 PCRE 版本(比 TRE 更一致):

gsub("(*UCP)\\s+Kč","",Benzin, perl=TRUE)

Linux R 上进行快速在线测试:
Benzin <- "29.60 Kč"
gsub("(*UCP)\\s+Kč","",Benzin, perl=TRUE)
## => [1] "29.60"

关于r - R中正则表达式的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45909521/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com