提取正则表达式的奇怪结果

时间:2015-11-30 08:05:44

标签: regex r

我不知道为什么我在""中提取".*"正则表达式时会收到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"

1 个答案:

答案 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,这似乎是此软件包的问题。