这篇文章询问如何在R中提取其他两个字符串之间的字符串:Extracting a string between other two strings in R
我正在寻找一个类似的答案,但现在涵盖了模式之间的多次出现。
示例字符串:
Fabricante: EMS S/A CNPJ: - 57.507.378/0001-01 Endereço: SAO BERNARDO DO CAMPO - SP - BRASIL Etapa de Fabricaçao: Fabricante: EMS S/A CNPJ: - 57.507.378/0003-65 Endereço: HORTOLANDIA - SP - BRASIL Etapa de Fabricaçao: Fabricante: NOVAMED FABRICAÇAO DE PRODUTOS FARMACEUTICOS LTDA CNPJ: - 12.424.020/0001-79 Endereço: MANAUS - AM - BRASIL Etapa de Fabricaçao:
在“Fabricante”和“CNPJ”这两个词之间,都有一个公司名称,我想从中提取出来。在这个字符串中,有三个这样的公司:“EMS S/A”、“EMS S/A”和“农产品知名制造商”。
基于上面的帖子,这个代码
gsub(".*Fabricante: *(.+) CNPJ:.*", "\\1", df$manufacturing_location[92])
返回最后一个匹配项“NOVAMED FABRICAÇAO DE PRODUTOS FARMACEUTICOS”。
当我变成
gsub(".*Fabricante: *(.*?) CNPJ:.*", "\\1", df$manufacturing_location[92])
它返回第一个。我尝试更改为\\2
,因为我认为这将编号出现,但随后我得到了一个空字符串。我还尝试使用stringr
的str_match_all
,但它也不起作用。
有人知道如何调整语法,以便我可以泰勒的代码返回每一个需要的三个?
我想把它放到一个mutate
语法中,这样我就可以把它传递到一个包含许多这样的字符串的数据集上,并把第一个、第二个和第三个条目作为变量返回。
3条答案
按热度按时间yftpprvb1#
我们可以按如下方式使用
str_match_all
:下面是对所使用的正则表达式模式的解释:
(?<=\\bFabricante: )
向后查找并AssertFabricante:
优先于.*?
然后匹配所有内容,直到达到最近的(?= CNPJ:)
先行并AssertCNPJ:
跟随2wnc66cl2#
您可以
strsplit
在关键字和子集到所需的元素。xlpyo6sf3#
您的数据似乎是debian控制文件格式,您可以在添加换行符后使用base R中的
read.dcf
,然后您可以访问您想要的任何数据列。---故障: