R 行不完全相等的正则表达式模式问题
我在从pdf下载和提取表格时遇到问题。目前,我正处于提取“contents”表的阶段,我将使用该表作为文档其余部分的索引。我的问题是表中有三列格式为一个字符串,有些列在第一列和第二列之间有一个空格,有些列有两个或更多。我应该使用哪个正则表达式模式 例如:R 行不完全相等的正则表达式模式问题,r,regex,R,Regex,我在从pdf下载和提取表格时遇到问题。目前,我正处于提取“contents”表的阶段,我将使用该表作为文档其余部分的索引。我的问题是表中有三列格式为一个字符串,有些列在第一列和第二列之间有一个空格,有些列有两个或更多。我应该使用哪个正则表达式模式 例如: a <- "15 Aguascalientes - Ent. Cd. de Los Niños AGS" b <- "3 Aguascalie
a <- "15 Aguascalientes - Ent. Cd. de Los Niños AGS"
b <- "3 Aguascalientes - Zacatecas MEX-045"
str_split_fixed(a, "\\s{2,}", n = 3)
str_split_fixed(b, "\\s{2,}", n = 3)
a您可以使用stringr::str_match
捕获您需要的每个零件:
库(stringr)
x[1,]“15”Aguascalientes-Ent.Cd.de Los Niños“AGS”
#=>[2,]3“Aguascalientes-Zacatecas”MEX-045
请参阅和。正则表达式详细信息:
^
-字符串开始
(\d+)
-第1组:一个或多个数字
\s+
-一个或多个空格
(.*)
-第2组:除换行符以外的任何零个或多个字符,尽可能少
\s+
-一个或多个空格
(\S+)
-组3:一个或多个非空白字符
$
-字符串结束
使用str_split
我们可以指定一个OR(
)条件,以在一个数字后的一个或多个空格(\\s+
)进行拆分,除了OP的正则表达式在多个空格字符处进行拆分外
library(stringr)
str_split(c(a, b), '(?<=\\d)\\s+|\\s{2,}')
假设OP需要一个三列data.frame,我们可以用公共分隔符,
替换这些空格,并在base R
中用read.csv
读取这些空格(确保列类型正确)
read.csv(text=gsub((?str\u split\u fixed
替换文本,而不是正则表达式。谢谢,这很有效。
#[[1]]
[1] "15" "Aguascalientes - Ent. Cd. de Los Niños" "AGS"
#[[2]]
[1] "3" "Aguascalientes - Zacatecas" "MEX-045"
read.csv(text = gsub("(?<=\\d)\\s+|\\s{2,}", ",", c(a, b),
perl = TRUE), header = FALSE)
# V1 V2 V3
#1 15 Aguascalientes - Ent. Cd. de Los Niños AGS
#2 3 Aguascalientes - Zacatecas MEX-045