我正在尝试使用R中的stringr包从字符串中提取所有内容,直到第一次出现下划线.
我试过的
str_extract("L0_123_abc", ".+?(?<=_)")
> "L0_"
Run Code Online (Sandbox Code Playgroud)
关闭但没有雪茄.我怎么得到这个?另外,理想情况下我想要一些易于扩展的东西,这样我就可以在第一个和第二个下划线之间获取信息,并获得第三个下划线之后的信息.
Wik*_*żew 26
要获得L0,你可以使用
> library(stringr)
> str_extract("L0_123_abc", "[^_]+")
[1] "L0"
Run Code Online (Sandbox Code Playgroud)
该[^_]+场比赛1个或更多字符比其他_.
此外,您可以拆分字符串_:
x <- str_split("L0_123_abc", fixed("_"))
> x
[[1]]
[1] "L0" "123" "abc"
Run Code Online (Sandbox Code Playgroud)
这样,您将拥有所需的所有子字符串.
同样可以实现
> str_extract_all("L0_123_abc", "[^_]+")
[[1]]
[1] "L0" "123" "abc"
Run Code Online (Sandbox Code Playgroud)
您可以使用subfrom base来使用_.*从 开始的所有内容_。
sub("_.*", "", "L0_123_abc")
#[1] "L0"
Run Code Online (Sandbox Code Playgroud)
或者使用[^_]什么都是但不是_。
sub("([^_]*).*", "\\1", "L0_123_abc")
#[1] "L0"
Run Code Online (Sandbox Code Playgroud)
或substr与 一起使用regexpr。
substr("L0_123_abc", 1, regexpr("_", "L0_123_abc")-1)
#substr("L0_123_abc", 1, regexpr("_", "L0_123_abc", fixed=TRUE)-1) #More performant alternative
#[1] "L0"
Run Code Online (Sandbox Code Playgroud)
正则表达式的环顾应该是
str_extract("L0_123_abc", ".+?(?=_)")
#[1] "L0"
Run Code Online (Sandbox Code Playgroud)