获取特定的字符串模式[关闭]
Posted
技术标签:
【中文标题】获取特定的字符串模式[关闭]【英文标题】:Getting a specific string pattern [closed] 【发布时间】:2022-01-09 05:14:37 【问题描述】:我有一个带有字符串列的数据库,这个数据库看起来像这样:
structure(list(variables = c("data$Ageee[data$Beneficiary == 1] and data$Age[data$Beneficiary == 0]",
"data$var[data$Beneficiary == 1] and data$Age[data$Beneficiary == 0]",
"data$variable_test[data$Beneficiary == 1] and data$Age[data$Beneficiary == 0]"
), values = c(0, 0, 0)), class = "data.frame", row.names = c(NA,
-3L))
但是,考虑到第一个 $
之后和第一个 [
之前的文本,我想获得一个新列,所以我得到:
structure(list(variables = c("Ageee", "var", "variable_test"
), values = c(0, 0, 0)), class = "data.frame", row.names = c(NA,
-3L))
感谢您的帮助。
【问题讨论】:
【参考方案1】:我们可以使用sub
来捕获$
之后的单词((\\w+
) - $
是正则表达式中的元字符,表示字符串的结尾,因此它被转义(\\
)
df1$variables <- sub("\\w+\\$(\\w+).*", "\\1", df1$variables)
-输出
> df1
variables values
1 Ageee 0
2 var 0
3 variable_test 0
【讨论】:
如果我们将字符串放在单引号中会发生什么,例如:structure(list(variables = c("data$`Ageee in Years`[data$Beneficiary == 1] and data$`Age in Years`[data$ Beneficiary == 0]", "data$var[data$Beneficiary == 1] and data$Age[data$Beneficiary == 0]", "data$variable_test[data$Beneficiary == 1] and data$Age[data$Beneficiary == 0]" ), values = c(0, 0, 0)), class = "data.frame", row.names = c(NA, -3L))
@Akrun
@Erivelton 您可以将代码(\\w+)
更改为sub("\\w+\\$([^[]+)\\[.*", "\\1", df1$variables)
即不是[
的字符被(([^[]+)
)捕获【参考方案2】:
我们可以将stringr
与str_extract
和str_remove
一起使用,通过积极的后视来确定所需的模式就在第一个$
之后。
library(dplyr)
library(stringr)
df %>% mutate(variables = str_extract(variables, "(<?\\$)\\w+")%>%
str_remove('\\$'))
variables values
1 Ageee 0
2 var 0
3 variable_test 0
【讨论】:
以上是关于获取特定的字符串模式[关闭]的主要内容,如果未能解决你的问题,请参考以下文章