如何在删除时加快名称提取

时间:2016-12-22 08:37:31

标签: r regex

以下是一个示例和解决方案,用于删除x <- "yyy XXX i.e.\r\n \r\n \r\n \r\n \r\n INFO: 12235041 \r\n \r\n \r\n" do.call(rbind, lapply(1:length(x), function(i) strsplit(gsub('[\n\r]',' ',x)," ")[[i]][1])) 并仅提取名称后的名称和短符号,例如或者f.s.g.等。

这个示例和解决方案对我有用,但速度很慢。我有这样的数十万行。

toString

2 个答案:

答案 0 :(得分:1)

我们可以使用sub

sub("\r\n.*", "", x)
#[1] "yyy XXX i.e."

答案 1 :(得分:1)

如果您不想使用正则表达式,请使用\r\n固定字符串拆分并获取第一个元素:

x <- "yyy XXX i.e.\r\n            \r\n        \r\n            \r\n            \r\n  INFO: 12235041 \r\n        \r\n            \r\n"
strsplit(x, "\r\n", fixed=TRUE)[[1]][1]

请参阅R demo

如果您的数据中的换行符样式不一致,则可以使用正则表达式替换

sub("[\r\n].*", "",x)

其中[\r\n]\r\n匹配,然后.*匹配任何0+字符,此匹配将与sub一起删除。使用regmatches^[^\r\n]+正则表达式可以实现相同的效果,该正则表达式在字符串的开头处与CR和LF之外的1 +个字符匹配:

unlist(regmatches(x, regexpr("^[^\r\n]+", x)))