如果适用于 R,则将第二个 space 替换为 \n

Replace second space for \n if applies in R

我有一个文本向量,假设:

vector <- c("20 DE NOVIEMBRE",  "CENTRO", "EL ARENAL 4A SECCION",     "IGNACIO ZARAGOZA", "JARDIN BALBUENA", "MOCTEZUMA 2A SECCION",    "MORELOS", "PEON DE LOS BAOS")

我想将第二个 space 替换为特殊字符“\n”。

我试过这个:

  vector <- gsub(".* .*( ).*", "\\n", vector)

但是没用。

这是预期的结果:

c("20 DE\nNOVIEMBRE",  "CENTRO", "EL ARENAL\n4A SECCION",     "IGNACIO ZARAGOZA", "JARDIN BALBUENA", "MOCTEZUMA 2A\nSECCION",    "MORELOS", "PEON DE\nLOS BAOS")

如何获取?

一种方法,使用 sub 和捕获组:

vector <- sub("^(\S+) (\S+) ", "\1 \2\n", vector)
vector

[1] "20 DE\nNOVIEMBRE"      "CENTRO"                "EL ARENAL\n4A SECCION"
[4] "IGNACIO ZARAGOZA"      "JARDIN BALBUENA"       "MOCTEZUMA 2A\nSECCION"
[7] "MORELOS"               "PEON DE\nLOS BAOS"    

数据:

vector <- c("20 DE NOVIEMBRE",  "CENTRO", "EL ARENAL 4A SECCION",
            "IGNACIO ZARAGOZA", "JARDIN BALBUENA", "MOCTEZUMA 2A SECCION",
            "MORELOS", "PEON DE LOS BAOS")

这里的正则表达式逻辑只是说要捕获 \S+ 给出的第一个和第二个词,同时消耗第一个和第二个 space。请注意,这只会匹配输入实际上有第二个 space 的情况。然后,我们替换为相同的,但用 \n 换行符代替第二个 space.

您可以使用

vector <- c("20 DE NOVIEMBRE",  "CENTRO", "EL ARENAL 4A SECCION",     "IGNACIO ZARAGOZA", "JARDIN BALBUENA", "MOCTEZUMA 2A SECCION",    "MORELOS", "PEON DE LOS BAOS")
sub("^\S+\s+\S+\K\s+", "\n", vector, perl=TRUE)

R demo 的输出:

[1] "20 DE\nNOVIEMBRE"      "CENTRO"                "EL ARENAL\n4A SECCION"
[4] "IGNACIO ZARAGOZA"      "JARDIN BALBUENA"       "MOCTEZUMA 2A\nSECCION"
[7] "MORELOS"               "PEON DE\nLOS BAOS"    

正则表达式是 ^\S+\s+\S+\K\s+(参见 demo),它匹配

  • ^ - 字符串开头
  • \S+ - 1+ 个非空格
  • \s+ - 1+ 个空格
  • \S+ - 1+ 个非空格
  • \K - 匹配重置运算符丢弃目前匹配的所有文本
  • \s+ - 1+ 个空白字符。