首页 > 解决方案 > 在 R 中删除文本文件中的特殊字符

问题描述

我在 R 中使用一个文本文件,并使用 readLine 函数和正则表达式从中提取单词。该文件在单词周围使用特殊字符(例如在单词之前和之后使用#sings 来表示它是粗体或在单词之前和之后使用@ 来表示它应该是斜体)来表示特殊含义,这会弄乱我的正则表达式。

到目前为止,这是我的 r 代码,它删除了所有空行,然后将我的文本文件组合成一个向量:

    book<-readLines("/Users/Desktop/SAMPLE .txt",encoding="UTF-8")
    #remove all empty lines
    empty_lines = grepl('^\\s*$', book)
    book = book[! empty_lines]
    #combine book into one variable
    xBook = paste(book, collapse = '')
    #remove extra white spaces for a single text of the entire book
    updated<-trimws(gsub("\\s+"," ",xBook))

当我运行更新时,我看到存储在变量中的整个文件更新但带有特殊字符:

更新 [1] “这是一个公认的事实,一个拥有好运的 #single# 男人一定想要一个妻子。然而,这种@man@ 的感受或观点可能鲜为人知。第一次进入一个社区,这个事实在周围家庭的脑海中已经根深蒂固,@that@ 他被认为是#their#女儿中的某个或其他的合法财产。

如何从更新变量中的单词中删除所有前导或尾随 # 或 @?

我想要的输出只是纯文本,没有指示应该加粗或斜体的单词:

更新 [1] “这是一个普遍公认的事实,一个拥有好运的单身男人一定需要一个妻子。然而,这样的男人在他第一次进入社区时的感受或观点可能鲜为人知,这个事实在周围家庭的脑海中根深蒂固,以至于他被认为是他们的某个或其他女儿的合法财产。

标签: rregextext-filesspecial-charactersgsub

解决方案


gsub("[@#]([a-zA-Z]+)[@#]", "\\1", x)

推荐阅读