返回字符串中第一次出现的字符

时间:2015-09-28 12:37:58

标签: regex r string

我一直试图在第一个var GOBLINS = GOBLINS || {}; GOBLINS.View = function() {}; GOBLINS.View.prototype.draw = function(objects) { for(i=0; i < objects.length; i++) { ctx.drawImage(objects[i],0,0); }; }; GOBLINS.View.prototype.update = function(data){ this.draw(data); }; GOBLINS.Model = function() { this.data = []; }; GOBLINS.Model.prototype.player = { hitPoints: 25, x: 15, y: 20, img: new Image(), push: function() { data.push(GOBLINS.Model.player.img); } }; GOBLINS.Model.prototype.getData = function(recall){ recall(this.data); }; GOBLINS.Controller = function() { var M = new GOBLINS.Model(); var V = new GOBLINS.View(); this.mainLoop(); }; GOBLINS.Controller.prototype.mainLoop = function() { var self = this; this.M.getData(function(data){ self.V.update(data); }); window.requestAnimationFrame(function(){ self.mainLoop(); }); }; window.onload = function() { var game = new GOBLINS.Controller(); GOBLINS.Model.player.img.src = "Image/Player.png"; var c=document.getElementById("gameCanvas"); var ctx=c.getContext("2d"); }; 符号出现后提取一部分字符串。例如,字符串看起来像^。我需要提取abc^28092015^def^1234夹在前两个28092015标志之间。

所以,我需要从第一个^符号的出现中提取8个字符。我一直试图提取第一个^符号的位置,然后将其用作substr函数中的参数。

我试着用这个:

^

参考所讨论的答案here

但它继续回到最后一个位置。有人可以帮帮我吗?

5 个答案:

答案 0 :(得分:3)

我会使用sub。

x <- "^28092015^def^1234"
sub("^.*?\\^(.*?)\\^.*", "\\1", x)
# [1] "28092015"

由于^是正则表达式中的特殊字符,因此您需要按顺序转义该字符以匹配文字^符号。

分割^并获取第二个索引的值。

strsplit(x,"^", fixed=-T)[[1]][2]
# [1] "28092015"

您可以使用gsub aslo。

gsub("^.*?\\^|\\^.*", "", x, perl=T)
# [1] "28092015"

答案 1 :(得分:2)

这是基础R的一个选项:

x <- "abc^28092015^def^1234"
m <- regexpr("(?<=\\^)(.+?)(?=\\^)", x, perl = TRUE)
##
R> regmatches(x, m)
#[1] "28092015"

答案 2 :(得分:1)

x <- 'abc^28092015^def^1234'
library(qdapRegex)
unlist(rm_between(x, '^', '^', extract=TRUE))[1]
# [1] "28092015"

答案 3 :(得分:1)

另一个选项是来自stri_extract_first

library(stringi)
library(stringi)
stri_extract_first_regex(str1, '(?<=\\^)\\d+(?=\\^)')
#[1] "28092015"

如果是两个^

之间的任何字符
stri_extract(str1, regex='(?<=\\^)[^^]+')
#[1] "28092015"

数据

str1 <- 'abc^28092015^def^1234'

答案 4 :(得分:1)

如果使用^拆分它会更好。但如果你仍然想要这个模式,你可以试试这个。

^\S+\^(\d+)(?=\^)

然后匹配组1。

<强>输出

28092015

请参阅DEMO