如果适用于 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+ 个空白字符。
我有一个文本向量,假设:
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+ 个空白字符。