我知道这个问题已在这里和这里被问到了,但是当我尝试它时出现了一个小问题:
x<- str_extract("Hello peopllz! My new home is #crazy gr8! #wow", "#\S+")
Error: '\S' is an unrecognized escape in character string starting "#\S"
Run Code Online (Sandbox Code Playgroud)
我改变了正则表达式"#(.+) ?","#\\s"但他们并没有提取井号标签.
然后我尝试了gsub方式:
x<- gsub("[^#(.+) ?]","","Hello! #London is gr8. #Wow")
Run Code Online (Sandbox Code Playgroud)
它给了: " # . #"
我出错的任何想法?我希望我的输出作为推文中所有主题标签的向量/列表(没有哈希!)
编辑:我不希望对推文进行标记,因为:1.我没有为我的程序的其余部分标记推文,2.如果我扩展它以处理大量的推文,那将是一个非常昂贵的步骤.
用"#\\S+"而不是"#\S+".
str_extract_all("Hello peopllz! My new home is #crazy gr8! #wow", "#\\S+")
# [[1]]
# [1] "#crazy" "#wow"
Run Code Online (Sandbox Code Playgroud)
这里有两个级别的解析.在低级正则表达式函数内str_extract获取要搜索的模式之前(即 "#\S+")它首先由R解析.R不识别\S为有效的转义字符并抛出错误.通过逃避斜线与\\你让R的传递\,并S为两个普通字符的正则表达式的功能,而不是将其解释为一个转义字符.
这可以产生相当奇怪的表达.想象一下,你有一个Windows网络上的计算机地址列表"\\computer".要搜索它,您需要输入内部str_extract(adr, "\\\\\\w+")转换"\\\w+"然后搜索的内容.