我知道这应该很简单,但我无法使用regex in R
从字符串返回字符子集。
Foo< - ' propertyid = R206411& state_id ='
Reg< - ' propertyid =(。*)& state_id ='
测试< - grep(pattern = Reg,x = Foo,value = TRUE)
这会为我捕获整个字符串,我想只捕获R206411
。我想要捕获的字符串可能在长度和内容上有所不同,因此关键是让捕获在'=' in propertyid=
之后开始,然后在看到'&' in '&state_id'
后结束捕获。
感谢您的时间。
答案 0 :(得分:1)
你必须使用正面的lookbehind和lookahead断言,如下所示:
Foo <- 'propertyid=R206411&state_id='
Reg <- gregexpr('(?<=propertyid=).*(?=&state_id=)', Foo, perl=TRUE)
regmatches(Foo, Reg)
答案 1 :(得分:1)
嗯,grep
对于您正在尝试执行的捕获组不能很好地发挥作用。你可能想要的是gsub
Foo <- 'propertyid=R206411&state_id='
Reg <- 'propertyid=(.*)&state_id='
gsub(Reg, "\\1", Foo)
# [1] "R206411"
这里我们采用你的模式,我们用“\ 1”替换匹配(因为R要求我们转义反斜杠,我们加倍斜线)代表第一个捕获组(这是括号表示的)。因此,由于您匹配整个字符串,它将仅使用匹配部分替换整个字符串。
答案 2 :(得分:0)