R语言正则提取问题:获取def后首个%ile前最后括号内的内容
R字符串提取:获取def后首个%ile前最后一对括号内容
需求
从字符串中提取满足以下条件的内容:
- 位于
def之后 - 在
def后第一个%ile之前的最后一对括号内,预期结果为4
问题诊断
原代码里的正则(?<=\\()(.*?)(?=\\)\\%ile)用了非贪婪匹配.*?,会从def后的第一个左括号开始匹配,直到遇到第一个)%ile,所以得到2)(3)(4;而str_extract_all会把后续(5)%ile里的5也提取出来,都不符合需求。
解决方案
直接用更精准的正则一步到位提取目标内容:
library(stringr) x <- "abc(0)(1)%ile, def(2)(3)(4)%ile(5)%ile" target <- str_extract(x, "(?<=def.*\\()([^)]+)(?=\\)%ile)") print(target) # 输出:"4"
正则说明
(?<=def.*\\():正向断言,确保目标内容在def加上任意长度字符后的左括号之后,跳过前面的括号内容([^)]+):匹配左括号后所有非右括号的字符,也就是最后一对括号里的内容(?=\\)%ile):正向断言,确保目标内容紧跟在右括号和%ile之前,限定到def后的第一个%ile位置
内容的提问来源于stack exchange,提问作者Ian Wang
相关产品推荐
相关产品推荐

