我有文字喜欢
la<-c("case when ANTIG_CLIENTE <= 4 then '01: ANTIG_CLIENTE <= 4' when ANTIG_CLIENTE <= 8 then '02: ANTIG_CLIENTE <= 8' else '99: Error' end ")
我想在单引号之间提取文本作为列表:
"01: ANTIG_CLIENTE <= 4","02: ANTIG_CLIENTE <= 8","99: Error"
我尝试了两种方法却没有成功
> sub('[^\]+\"([^\']+).*','\\1',la) Error: '\]' is an unrecognized escape in character string starting "'[^\]" > regmatches(x,gregexpr('"[^']*"',la))[[1]] Error: unexpected ']' in "regmatches(x,gregexpr('"[^']"
如何在单引号之间获取文本?
解决方法
这应该得到你想要的.唯一的假设是你在单引号之间想要的所有字符串都包含一个冒号(否则,我们应该如何区分’01:ANTIG_CLIENTE< = 4'来自'当ANTIG_CLIENTE< = 8 then'时,两者都在单个之间引号)?
> regmatches(la,gregexpr("'[^']*:[^']*'",la)) [[1]] [1] "'01: ANTIG_CLIENTE <= 4'" "'02: ANTIG_CLIENTE <= 8'" "'99: Error'"
基本上,我们试图返回单引号形式的所有表达式(因此gregexpr而不是regexpr),除了单引号,冒号,单引号,单引号之外的东西.
如果你想在返回的内容中删除单引号,你需要前瞻和后瞻,这需要告诉R将你的正则表达式解释为perl:
> regmatches(la,gregexpr("(?<=')[^']*:[^']*(?=')",la,perl=T)) [[1]] [1] "01: ANTIG_CLIENTE <= 4" "02: ANTIG_CLIENTE <= 8" "99: Error"