是否有一种动态的方式从表单中提取信息?

时间:2019-07-23 11:32:43

标签: r regex

我想编写一个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"

在这种情况下,它在名称之后使用模式。

1 个答案:

答案 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"