如果字符串中间存在“ =”(等号),请删除引号。正则表达式

时间:2018-07-25 19:55:48

标签: r regex

在此字符串中,字符“ =”区分产品的属性,而逗号区分属性内的变量。但是,我们发现,有时没有变量可放时,有时会添加额外的引号。

完整的字符串是:

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+=",但是选择了所有引号。我不想在引号之间选择文本,目的是选择并删除这些引号。

我们要删除那些之间包含相等的引号。可以使用且需要保留的引号是用来分隔字符串中逗号的引号,以区分变量和字符串。

正则表达式需要检测到引号和右引号中包含的=,但要考虑介于两者之间的文本。并且一旦检测到这种情况,就删除那些不需要的引号。

谢谢!

1 个答案:

答案 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