R语言如何编写正则表达式仅提取括号内的纯字符内容
R语言正则提取括号内纯字母内容方案
你之前测试的3个正则匹配失败的原因很明确:
pattern1 = '\\([^()]*[^()]*\\)'把左右括号本身纳入了匹配范围,结果必然附带括号pattern2 = '(?<=\\()[^()]*(?=\\))'仅排除了括号字符,会把括号内所有非括号内容(包括^、数字这类符号)全部提取,没有做字符类型过滤pattern3 = '.*\\((.*)\\).*'前后加了贪婪匹配的通配符.*,会直接匹配整个字符串,且str_extract默认不返回捕获组内的内容,自然拿不到目标值
要实现从I(data^2)里仅提取括号内的纯字母内容data,直接用下面的正则即可:
library(stringr) test_text <- 'I(data^2)' # 匹配逻辑:定位左括号后,提取连续英文字母,直到碰到非字母内容+右括号 str_extract(test_text, '(?<=\\()[a-zA-Z]+(?=[^a-zA-Z]*\\))')
运行返回结果:
[1] "data"
正则各段逻辑说明:
(?<=\\():正向零宽断言,定位左括号(的位置,不将括号本身计入匹配结果[a-zA-Z]+:匹配1个及以上连续的大小写英文字母,也就是你需要的纯字符内容(?=[^a-zA-Z]*\\)):正向零宽断言,确认匹配到的字母块后面可以跟任意数量的非字母字符(比如^2),直到碰到右括号),不会把符号、数字纳入匹配结果
如果后续遇到括号内字母前后夹带其他符号、数字的场景,这个写法都能正常提取到括号内的连续纯字母块,不需要额外做字符串替换处理。
内容的提问来源于stack exchange,提问作者Dollar Tune-bill
相关产品推荐
相关产品推荐

