如何提取所有内容直到第一次出现模式
How to extract everything until first occurrence of pattern
我正在尝试使用 R 中的 stringr 包来提取字符串中的所有内容,直到第一次出现下划线。
我试过的
str_extract("L0_123_abc", ".+?(?<=_)")
> "L0_"
关闭但没有雪茄。我如何得到这个?另外,理想情况下,我想要一些易于扩展的东西,这样我就可以获取第一个和第二个下划线之间的信息,并获取第二个下划线之后的信息。
使用 gsub...
gsub("(.+?)(\_.*)", "\1", "L0_123_abc")
正则表达式环视应该是
str_extract("L0_123_abc", ".+?(?=_)")
#[1] "L0"
要获得 L0
,您可以使用
> library(stringr)
> str_extract("L0_123_abc", "[^_]+")
[1] "L0"
[^_]+
匹配 _
以外的 1 个或多个字符。
此外,您可以将字符串拆分为 _
:
x <- str_split("L0_123_abc", fixed("_"))
> x
[[1]]
[1] "L0" "123" "abc"
这样,您将拥有所需的所有子字符串。
同样可以用
实现
> str_extract_all("L0_123_abc", "[^_]+")
[[1]]
[1] "L0" "123" "abc"
您可以使用 base 中的 sub
使用 _.*
获取从 _
.
开始的所有内容
sub("_.*", "", "L0_123_abc")
#[1] "L0"
或使用 [^_]
什么是一切但不是 _
。
sub("([^_]*).*", "\1", "L0_123_abc")
#[1] "L0"
或将 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"
我正在尝试使用 R 中的 stringr 包来提取字符串中的所有内容,直到第一次出现下划线。
我试过的
str_extract("L0_123_abc", ".+?(?<=_)")
> "L0_"
关闭但没有雪茄。我如何得到这个?另外,理想情况下,我想要一些易于扩展的东西,这样我就可以获取第一个和第二个下划线之间的信息,并获取第二个下划线之后的信息。
使用 gsub...
gsub("(.+?)(\_.*)", "\1", "L0_123_abc")
正则表达式环视应该是
str_extract("L0_123_abc", ".+?(?=_)")
#[1] "L0"
要获得 L0
,您可以使用
> library(stringr)
> str_extract("L0_123_abc", "[^_]+")
[1] "L0"
[^_]+
匹配 _
以外的 1 个或多个字符。
此外,您可以将字符串拆分为 _
:
x <- str_split("L0_123_abc", fixed("_"))
> x
[[1]]
[1] "L0" "123" "abc"
这样,您将拥有所需的所有子字符串。
同样可以用
实现> str_extract_all("L0_123_abc", "[^_]+")
[[1]]
[1] "L0" "123" "abc"
您可以使用 base 中的 sub
使用 _.*
获取从 _
.
sub("_.*", "", "L0_123_abc")
#[1] "L0"
或使用 [^_]
什么是一切但不是 _
。
sub("([^_]*).*", "\1", "L0_123_abc")
#[1] "L0"
或将 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"