【问题标题】:How to extract specific symbol from text in R如何从R中的文本中提取特定符号
【发布时间】:2019-04-01 15:07:22
【问题描述】:

我正在 R 中建立一个新项目,并想从文本中提取特定符号

X <- c("amazing tiny phone ^_^","so cute!!! <3")

我想从R中的X中提取^_^&lt;3

谢谢!

【问题讨论】:

    标签: r string extract


    【解决方案1】:

    更直接

    X = c("amazing tiny phone ^_^","so cute!!! <3","^_^ and :) are my fav symbols")
        patt=c("=d" ,"<3" , ":o" , ":(" ,
        ":)" , "(y)" , ":*" , "^_^", ":d" ,";)" , ":'(") 
    
    variable = sapply(X,function(x){
                        i = which(patt%in%strsplit(x," ")[[1]])
                        if (length(i)>0){
                            paste(patt[i],collapse=" ")
                                        } else{NA}
              })
    
    names(variable)=NULL
    
    > variable
    [1] "^_^"    "<3"     ":) ^_^" NA  
    

    【讨论】:

    • 我想提取这些符号中的任何一个 =d ,
    • 添加了一种更直接的方法,同时考虑了不同符号的多次出现
    • 没问题 - 如果这回答了您的问题,请将其标记为已接受的答案以关闭主题 edit 另请注意,我对代码进行了一些修改,以便正确解释没有任何符号的字符串!
    • 抱歉,如果我只需要返回符号以将其放入变量而不是整个文本中,我该怎么办?
    • for(文档中的值){ variable = sapply(value,function(x){ i = which(patt%in%strsplit(x," ")[[1]]) if (length (i)>0){ paste(patt[i],collapse=" ") } else{NA} }) names(variable)=NULL variable } docs 是一个向量,我需要从向量中的每个文本中提取符号,但是它没有说话
    【解决方案2】:

    @GraemeForst 可以使用分组和前瞻来实现泛化:

    group <- "[\\^\\_\\<\\>3\\:\\(\\)\\;]"
    pat <- sprintf(".*[\\s\\b](%s+)(?!\\1)", group)
    
    • group 定义字符分组。基本上我们想要提取的所有符号。
    • pat 定义了我们的匹配模式。 [\\s\\b] 表示在可能的匹配之前必须有空白或边界。 (?!\\1) 说在比赛之后不能有 group 的元素。

    这是一个演示:

    X <- c("amazing tiny phone ^_^","so cute!!! <3", "I like pizza :)", "hello beautiful ;)")
    gsub(pat, "\\1", grep(pat, X, value = TRUE, perl = TRUE), perl = TRUE)
    # [1] "^_^" "<3"  ":)"  ";)" 
    

    这可以进一步细化和概括。可以添加一个非常简单的步骤是扩展grouping


    旧答案

    您可以为此使用正则表达式:

    # create the pattern to be extracted
    pat = ".*(\\^\\_\\^).*|.*(\\<3).*"  # escape special characters with "\\" and ".*" to specify there may be text before/after
    
    # extract
    gsub(pat, "\\1\\2", grep(pat, X, value = TRUE, perl = TRUE), perl = TRUE)
    # [1] "^_^" "<3"
    

    【讨论】:

    • 有更通用的方法吗?我想知道您是否可以使用"[a-zA-Z]+" 之类的模式找到所有没有字母的“单词”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 2012-03-30
    • 1970-01-01
    相关资源
    最近更新 更多