使用str_extract提取含括号字符串模式返回NA的解决方法
问题:使用str_extract提取含括号的字符串模式返回NA怎么解决?
尝试用str_extract从字符串中提取由|分隔的状态模式,执行以下代码:
str_extract('Wrong DATA (3)', "Wrong DATA (3)|No answer (1)|No answer (2)|No answer (3)|No answer (6)|No answer (7)") # [1] NA
返回结果为NA,需要提取带括号的字符串模式,且不能删除括号(需区分带括号和不带括号的重复模式)。
解决方法
原因
正则表达式中,(和)是特殊元字符,用于定义分组,而非字面意义的括号。原代码中的模式会把(3)解析为分组标记,实际尝试匹配的是Wrong DATA 3,与目标字符串Wrong DATA (3)不匹配,因此返回NA。
两种可行方案
方案1:转义括号
在模式中的每个括号前添加双反斜杠\\,将其转为字面匹配:str_extract('Wrong DATA (3)', "Wrong DATA \\(3\\)|No answer \\(1\\)|No answer \\(2\\)|No answer \\(3\\)|No answer \\(6\\)|No answer \\(7\\)") # [1] "Wrong DATA (3)"方案2:使用fixed()函数
通过fixed()告诉str_extract将整个模式当作普通字符串处理,无需解析正则特殊字符:str_extract('Wrong DATA (3)', fixed("Wrong DATA (3)|No answer (1)|No answer (2)|No answer (3)|No answer (6)|No answer (7)")) # [1] "Wrong DATA (3)"
内容的提问来源于stack exchange,提问作者Angelina T
相关产品推荐
相关产品推荐

