提问人:Lachlan Macnish 提问时间:10/9/2023 最后编辑:Lachlan Macnish 更新时间:10/13/2023 访问量:36
为什么 forstringr::str_split_extract 不像其他字符那样在句点 (.) 上拆分?
Why doesn't forstringr::str_split_extract split on a period (.) like it will with other characters?
问:
为什么 forstringr::str_split_extract 不像其他字符那样在句号字符上拆分?
根据 str_split_extract 手册中的示例,以下代码运行良好:
code <- c("HS-IB-EDE", "OG-OYO-CAS-0121", "NY-ILR-NIG-036")
str_split_extract(code, "-", 1)
str_split_extract(code, "-", 4)
这将返回结果:
> str_split_extract(code, "-", 1)
[1] "HS" "OG" "NY"
> str_split_extract(code, "-", 4)
[1] NA "0121" "036"
但是,如果我修改它以将“-”替换为“.”,它只会返回所有值的 NA:
code <- c("HS.IB.EDE", "OG.OYO.CAS.0121", "NY.ILR.NIG.036")
str_split_extract(code, ".", 1)
str_split_extract(code, ".", 4)
这给出了结果:
> str_split_extract(code, ".", 1)
[1] NA NA NA
> str_split_extract(code, ".", 4)
[1] NA NA NA
为什么?
示例代码:https://search.r-project.org/CRAN/refmans/forstringr/html/str_split_extract.html
答:
0赞
Lachlan Macnish
10/9/2023
#1
我发现 stringr 存在类似的问题:
https://github.com/tidyverse/stringr/issues/303
事实证明,默认情况下模式字符串是正则表达式,“.”是有效的正则表达式,因此它工作正常,但只是没有达到我的预期。因此,必须将其转换为适当的正则表达式才能使用正则表达式搜索 (.):
code <- c("HS.IB.EDE", "OG.OYO.CAS.0121", "NY.ILR.NIG.036")
str_split_extract(code, "\\.", 1)
str_split_extract(code, "\\.", 4)
...返回。。。
> str_split_extract(code, "\\.", 1)
[1] "HS" "OG" "NY"
> str_split_extract(code, "\\.", 4)
[1] NA "0121" "036"
评论
0赞
Konrad Rudolph
10/9/2023
“正则表达式模式是有效的”有点误导:它们无效,它们是默认的。因此,您传递给的每个字符串都被视为正则表达式。要禁用此功能,您需要传递字符串以外的其他内容,例如.pattern
str_split_extract()
fixed('.')
0赞
Lachlan Macnish
10/9/2023
谢谢@KonradRudolph,但你有参考吗?我只是根据手册页中的措辞来表达这一点,但你很可能是对的。search.r-project.org/CRAN/refmans/forstringr/html/......
1赞
SamR
10/9/2023
@LokMac这似乎是一个相当小众的软件包,没有像它所依赖的那样全面记录。但是,有问题的函数在文档说默认值是正则表达式的情况下使用。stringr
stringr::str_split()
评论