在此字符串中,字符“ =”区分产品的属性,而逗号区分属性内的变量。但是,我们发现,有时没有变量可放时,有时会添加额外的引号。
完整的字符串是:
Uso =“ Protector para patas de silla,mesas,escaleras,muebles”,“ Topes,4-Tipo = Topes,regatones”,2-Familia =FerreteríayPlomería,regatones,7-Contenido =“ 12 unidades,4 -Origen = China,4-Material = Goma,2-Modelo = Goma transparente,9-Incluye = 12 unidades,3-Color = Transparente“
这是正确的:
Uso="Protector para patas de silla,mesas,escaleras,muebles"
这是错误的:
"Topes,4-Tipo=Topes,regatones",2-Familia=Ferretería y Plomería,regatones,7-Contenido="12 unidades,4-Origen=China,4-Material=Goma,2-Modelo=Goma transparente,9-Incluye=12 unidades,3-Color=Transparente"
Categoría="Topes,4-Tipo=Topes,regatones",2-Familia=Ferretería y Plomería,regatones,7-Contenido="12 unidades,4-Origen=China,4-Material=Goma,2-Modelo=Goma transparente,9-Incluye=12 unidades,3-Color=Transparente"
我尝试过"|w+="
,但是选择了所有引号。我不想在引号之间选择文本,目的是选择并删除这些引号。
我们要删除那些之间包含相等的引号。可以使用且需要保留的引号是用来分隔字符串中逗号的引号,以区分变量和字符串。
正则表达式需要检测到引号和右引号中包含的=,但要考虑介于两者之间的文本。并且一旦检测到这种情况,就删除那些不需要的引号。
谢谢!
答案 0 :(得分:2)
我知道加引号的子字符串应位于=
之前。然后,您需要
gsub('="([^"=]*=[^"]*)"', '=\\1', x)
请参阅R demo online:
x <- '10-Uso="Protector para patas de silla,mesas,escaleras,muebles",6-Características=Regaton interior 1 1/4 plástico blanco 4 unidades,1-Marca=Nagel,Tipo=Topes,5-Medidas=3 cm,3-Categoría=Topes y regatones,7-Contenido=4 unidades,4-Tipo=Regatones,2-Familia=Ferretería y Plomería,9-Incluye=4 regatones plásticos,regatones,4-Origen="Argentina,4-Material=Plástico,2-Modelo=Regatón interior 1 1/4,3-Color=Blanco"'
cat(gsub('="([^"=]*=[^"]*)"', '=\\1', x))
## => 10-Uso="Protector para patas de silla,mesas,escaleras,muebles",6-Características=Regaton interior 1 1/4 plástico blanco 4 unidades,1-Marca=Nagel,Tipo=Topes,5-Medidas=3 cm,3-Categoría=Topes y regatones,7-Contenido=4 unidades,4-Tipo=Regatones,2-Familia=Ferretería y Plomería,9-Incluye=4 regatones plásticos,regatones,4-Origen=Argentina,4-Material=Plástico,2-Modelo=Regatón interior 1 1/4,3-Color=Blanco
因此,保留了muebles
之后的引号和blanco
之后的引号。
这是如何工作的?
="
-匹配="
子字符串([^"=]*=[^"]*)
-匹配并捕获到第1组:
[^"=]*
-除"
和=
以外的零个或多个字符=
-一个=
符号[^"]*
-除"
以外的任何0+个字符"
-匹配"
。替换模式是=
,其值存储在第1组内存缓冲区(\1
,替换后向引用)中。
请参见regex demo。