提取字符串之间的字符串(单词序列)

问题描述 投票:0回答:2

我想根据其他字符串从字符串中提取值

例子:

单词中没有{}和[]符号,我加了它是为了引题

目标字符串:[xxxxxx] 分隔符:{xxxxxx}

"{CNPJ} [00.005.598/0001-01] {Razão Social} [CONEMAX DO BRASIL INDUSTRIA E COMERCIO DE CONEXOES LTDA] {Nome Fantasia} [CONEMAX DO BRASIL] {Tipo} [MATRIZ] {Data Abertura} [17 /05/1994] {Situação Cadastral} [ATIVA] {Data da Situação Cadastral} [27/08/2005] {Capital Social} [R$ 50.000] {Natureza Jurídica} [2062 - SOCIEDADE EMPRESARIA LIMITADA] {Empresa MEI} [ Não]"

我想得出一个结论,{xxxxxx} 是列名,[xxxxxx] 是内容。

我还没有尝试过任何东西,但我相信 str_extract 和正则表达式。

r string extract stringr
2个回答
0
投票

您可以在此处使用正面和负面的回顾来匹配您的值和列名称:

library(stringr)

# Match any text between curly braces
header <- str_match_all(txt, "(?<=\\{).*?(?=\\})")

# Match any text between square brackets
values <- str_match_all(txt, "(?<=\\[).*?(?=\\])")

# Create a data frame
values |>
    unlist() |>
    matrix(nrow = 1) |>
    data.frame() |>
    setNames(unlist(header))


#                 CNPJ                                            Razão Social     Nome Fantasia   Tipo Data Abertura Situação Cadastral Data da Situação Cadastral
# 1 00.005.598/0001-01 CONEMAX DO BRASIL INDUSTRIA E COMERCIO DE CONEXOES LTDA CONEMAX DO BRASIL MATRIZ    17/05/1994              ATIVA                 27/08/2005
#   Capital Social                    Natureza Jurídica Empresa MEI
# 1      R$ 50.000 2062 - SOCIEDADE EMPRESARIA LIMITADA         Não

0
投票

您可能必须手动指定列名,然后在

strsplit
的正则表达式模式上使用
paste(., collapse='|')
(给出
"CNPJ|Razão Social|Nome Fantasia|..."
)。

cols <- c("CNPJ", "Razão Social", "Nome Fantasia", "Tipo", "Data Abertura", 
          "Situação Cadastral", "Data da Situação Cadastral", "Capital Social", 
          "Natureza Jurídica", "Empresa MEI")

t(sapply(el(strsplit(x, paste(cols, collapse = "|"))), trimws)[-1]) |>
  as.data.frame() |> setNames(make.names(cols)) |> 
  transform(Data.Abertura=as.Date(Data.Abertura, '%d/%m/%Y'),  ## optional some cleaning
            Data.da.Situação.Cadastral=as.Date(Data.da.Situação.Cadastral, '%d/%m/%Y'),
            Capital.Social=gsub('\\D', '', Capital.Social))
#                 CNPJ                                            Razão.Social     Nome.Fantasia
# 1 00.005.598/0001-01 CONEMAX DO BRASIL INDUSTRIA E COMERCIO DE CONEXOES LTDA CONEMAX DO BRASIL
#     Tipo Data.Abertura Situação.Cadastral Data.da.Situação.Cadastral Capital.Social
# 1 MATRIZ    1994-05-17              ATIVA                 2005-08-27          50000
#                      Natureza.Jurídica Empresa.MEI
# 1 2062 - SOCIEDADE EMPRESARIA LIMITADA         Não

资料:

x <- "CNPJ 00.005.598/0001-01 Razão Social CONEMAX DO BRASIL INDUSTRIA E COMERCIO DE CONEXOES LTDA Nome Fantasia CONEMAX DO BRASIL Tipo MATRIZ Data Abertura 17/05/1994 Situação Cadastral ATIVA Data da Situação Cadastral 27/08/2005 Capital Social R$ 50.000 Natureza Jurídica 2062 - SOCIEDADE EMPRESARIA LIMITADA Empresa MEI Não"
© www.soinside.com 2019 - 2024. All rights reserved.