获取特定的字符串模式[关闭]

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】:

我们可以将stringrstr_extractstr_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

【讨论】:

以上是关于获取特定的字符串模式[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在特定字符处拆分字符串并构建不同的字符串组合[关闭]

在数字中的特定数字处查找数字[关闭]

在没有数组的长序列中搜索模式字符串[关闭]

使用模式从字符串中提取数据[关闭]

在字符串列表中查找特定模式(正则表达式)(Python)

在python中将字符串转换为数字[关闭]