我想编写一个R脚本,使我可以提取MSG文件(电子邮件)的信息。 电子邮件是来自网站的自动注册邮件。它们包含有关用户的信息(姓名,姓氏,电子邮件等)。我尝试使用正则表达式提取特定的信息。问题是字段的顺序可能会有所不同。
我使用的msgxtractr-Library可以正常工作。输出看起来像这样:
\r\n\r\nAnrede \r\n\r\nHerr\r\n\r\nVorname \r\n\r\nJames \r\n\r\nName \r\n\r\nBond \r\n\r\
要获取信息,我在两个文本模式->(。*?)
之间提取文本示例: “ Vorname \ r \ n \ r \ n(。*?)\ r \ n \ r \ n”
library(msgxtractr) #usage
library(magrittr)
#------pfad setzen-----------------------------------------------------------
setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
#------Msg-Datei einlesen-----------------------------------------------------------
BALBLI = read_msg("MSG/Test2.msg")
#------Text zwischen 2 Pattern Extrahieren-----------------------------------
testAR = BALBLI[["body"]][["text"]] #Body aus MSG-Datei
patternVN= "Vorname \r\n\r\n(.*?) \r\n\r\n"
searchVN <- regmatches(testAR,regexec(patternVN,testAR))
Vorname = searchVN[[1]][2]
Vorname
我一直在尝试两个测试案例:
1)好的结果:
> patternVN= "Vorname \r\n\r\n(.*?) \r\n\r\n"
> searchVN <- regmatches(testAR,regexec(patternVN,testAR))
> Vorname = searchVN[[1]][2]
> Vorname
[1] "James"
2)错误结果:
> patternVN= "Vorname \r\n\r\n(.*?) \r\n\r\n"
> searchVN <- regmatches(testAR,regexec(patternVN,testAR))
> Vorname = searchVN[[1]][2]
> Vorname
[1] "John\r\n\r\nName"
在这种情况下,它在名称之后使用模式。
答案 0 :(得分:0)
我会尝试一种完全不同的方法。
msg <- "\r\n\r\nAnrede \r\n\r\nHerr\r\n\r\nVorname \r\n\r\nJames \r\n\r\nName \r\n\r\nBond \r\n\r\n"
msg <- gsub("^\\s+", "", msg) # remove spaces at the beginning and end
msg <- gsub("\\s+$", "", msg)
words <- strsplit(msg, " *[\n\r]+ *")[[1]]
res <- as.list(words[seq(2, length(words), 2)])
names(res) <- words[seq(1, length(words), 2)]
结果
> res
$Anrede
[1] "Herr"
$Vorname
[1] "James"
$Name
[1] "Bond"