我不知道为什么我在""
中提取".*"
正则表达式时会收到R
个符号。
这是我收到的代码和结果。
library(stringr)
y <- enc2utf8("a ala asia kasia stasia karolina")
str_extract_all(y, regex(".*"))[[1]]
[1] "a ala asia kasia stasia karolina" ""
这是正常的还是操作系统设置的情况?
这是我的Sys.getlocale
:
[1] "LC_COLLATE=Polish_Poland.1250;LC_CTYPE=Polish_Poland.1250;
LC_MONETARY=Polish_Poland.1250;LC_NUMERIC=C;LC_TIME=Polish_Poland.1250"
答案 0 :(得分:0)
The fact that R packages are running C code under the hood (and stringr is not an exception:从版本1.0开始,stringr
是一个瘦包装器大约stringi
,它使用基于ICU library 的高效C代码实现stringr
中的所有功能。)和类似的"bug" with std::regex
module让我相信它必须如何在内部拆分字符串以返回匹配的子字符。
最佳做法是 永远不要使用可能与空字符串 相匹配的无法使用的正则表达式。虽然在某些语言中正则表达式可能正常工作,但在其他语言中它可能会导致严重问题(无限循环或重复替换等)。
因此,如果您想匹配任何可以为空的字符串str_extract_all
,请使用锚点:
^.*$
请注意,gsub
没有错误,gsub(".*", "new string", "old")
返回new string
,这似乎是此软件包的问题。