如何在R中删除含问号、空格的特定模式之前的全部字符串内容
问题原因
stringr包的str_remove函数默认使用正则表达式进行匹配,问号?是正则中的特殊元字符,代表前面的字符可匹配0次或1次,你直接把带?的字符串当匹配模式写,程序不会把它当成普通的问号字符匹配,所以会出现删除失效、删不完全的问题。
解决方法
方法1:转义正则特殊字符
要匹配字面意义的问号?,需要在?前加两个反斜杠\\转义(R语言字符串本身需要一层转义,正则规则需要另一层转义):
library(stringr) question <- "How much do you agree or disagree to the following statements? - I am happy" str_remove(question, "How much do you agree or disagree to the following statements\\? - ")
输出:
[1] "I am happy"
方法2:使用固定匹配(更省心)
如果不想处理各种正则特殊字符的转义规则,可以用fixed()函数包裹匹配模式,程序会把模式里的所有内容都当成普通字符串字面量匹配:
str_remove(question, fixed("How much do you agree or disagree to the following statements? - "))
方法3:模糊匹配前缀(不用写全前缀内容)
如果你只要提取- 后面的内容,也可以写模糊匹配规则,直接删掉问号加- 之前的所有内容,适配前缀有小改动的场景:
str_remove(question, "^.*\\? - ")
内容的提问来源于stack exchange,提问作者writer_typer
相关产品推荐
相关产品推荐

