regex - R正则表达式获取单引号之间的文本

标签 regex r

我有类似的文字

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'' when 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" 

关于regex - R正则表达式获取单引号之间的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31777636/

相关文章:

r - 制作数据框每一列的向量并返回列表中的向量

r - 水平线; y 轴作为因子 : ggplot2

ruby - 用正则表达式和 ruby 拆分方法名称

java - 用于匹配模式和分组正确元素的正则表达式

java - Java 中的正则表达式模式

java - 正则表达式在 Java 中的多行字符串中查找匹配项

java 用正则表达式分割字符串

R:将曲线拟合到点:使用什么线性/非线性模型?

R 的 ifelse 语句的 Python 版本

r - BinaryTree (ctree, party) 的绘图忽略了 par() 的绘图选项