如何处理Microsoft365R的R6嵌套列表:转DataFrame并正则提取?
处理Microsoft365R的R6邮件对象:提取DataFrame与正则匹配
1. 将嵌套R6邮件对象转换为主题+正文的DataFrame
Microsoft365R返回的邮件是R6类对象,无法直接通过unlist或常规展开方法提取字段,必须显式调用对象的属性或方法来获取主题和正文:
library(Microsoft365R) library(purrr) library(tibble) # 遍历邮件列表,提取主题和纯文本正文 email_df <- map_dfr(emails, function(mail) { tibble( 主题 = mail$subject, # 直接访问主题属性 正文 = mail$get_body_text() # 获取纯文本格式的正文,避免HTML标签干扰 ) })
如果需要保留HTML格式的正文,将get_body_text()替换为get_body()即可。
2. 遍历列表用正则匹配提取正文
完全可行,只需先从R6对象中提取正文文本,再用grepl()进行匹配:
方式1:提取所有匹配的正文内容(含NA)
# 定义目标正则表达式 target_str <- "你的特定匹配字符串" # 遍历并筛选匹配的正文 matched_bodies <- map_chr(emails, function(mail) { body_text <- mail$get_body_text() if (grepl(target_str, body_text, ignore.case = TRUE)) { # ignore.case可选,忽略大小写 body_text } else { NA_character_ } })
方式2:直接过滤匹配的邮件对象,再提取主题和正文
# 筛选出正文包含目标字符串的邮件 filtered_emails <- keep(emails, function(mail) { grepl(target_str, mail$get_body_text(), ignore.case = TRUE) }) # 转换为DataFrame filtered_email_df <- map_dfr(filtered_emails, function(mail) { tibble( 主题 = mail$subject, 正文 = mail$get_body_text() ) })
注意事项
- 若邮件正文是HTML格式,直接用
get_body()获取的内容会包含HTML标签,可能影响正则匹配,优先用get_body_text()提取纯文本。 - R6对象的属性/方法可通过
str(emails[[1]])查看,确认主题、正文对应的访问方式。
内容的提问来源于stack exchange,提问作者Dre Day
相关产品推荐
相关产品推荐

