从R中的* .txt文件中提取文本

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (229)

我已经使用Expressions for Mac来确认我的正则表达式工作,但我找不到从我的文本文件中提取信息的命令。我有2,500个文本文件,我需要提取每个文档的日期以填充数据集。举个例子,“日期”是第一个提取的变量,还有其他变量。文件格式各不相同,有多个日期。我只对每个文件的第一个日期感兴趣。有些文档有一个带日期的新行,其他文档带有“Date”或“Dated”一词。

每个文本文档的示例:

Bangor
dorset
LL56 43r

date:         10 july 2009
take notice:  the blah blah blah text goes here and there's lots of it.
action:

有效的正则表达式:

"\\d{1,2}\\s+(?:january|february|march|april|may|june|july|august|september|october|november|december)\\s+\\d{4}"

文本文档在R Studio环境中作为单个元素字符向量可见。我想“按原样”提取文字,就像......

> strapply(NoFN, ("\\d{1,2}\\.?:january|february|march|april|may|june|july|august|september|october|november|december\\.\\d{4}")[[1]]
> [1] 10 july 2009

显然这实际上并不奏效!

非常感谢大家的解答!

提问于
用户回答回答于

你的正则表达式不适合R,因为你需要转义\角色。

正则表达式应该是:

"\\d{1,2}\\s+(?:january|february|march|april|may|june|july|august|september|october|november|december)\\s+\\d{4}"

如果您使用该stringr软件包,并且您的文本已加载,则txt可以执行以下操作:

library(stringr)

txt = "Bangor dorset LL56 43r\n date: 10 july 2009 \n take notice: the blah blah blah text goes here and there's lots of it. action:"

str_match(string = txt, pattern = "\\d{1,2}\\s+(?:january|february|march|april|may|june|july|august|september|october|november|december)\\s+\\d{4}")

        [,1]          
[1,] "10 july 2009"
用户回答回答于

我觉得应该这样做。与你的问题里面不同,它是通过使用内置变量month.name,将月份分组()

txt <- "\n date: 10 july 2009 \n take notice: the blah blah blah text goes here and there's lots of it. action:"

pattern <- paste(tolower(month.name), collapse = "|")
pattern <- paste0("(", pattern, ")")
pattern <- paste("[[:digit:]]{1,2}[[:space:]]*", pattern, "[[:digit:]]{4}")

m <- regexpr(pattern, txt)
regmatches(txt, m)
#[1] "10 july 2009"

扫码关注云+社区

领取腾讯云代金券