【问题标题】:Return value between two characters in a string返回字符串中两个字符之间的值
【发布时间】:2019-08-18 08:16:43
【问题描述】:

我正在尝试从 Word 文档中提取表单中的值,以便将它们制成表格。我使用 antiword 包将 .doc 转换为字符串,现在我想根据文档中的标记提取值。

例如

example<- 'CONTACT INFORMATION\r\n\r\nName:  John Smith\r\n\r\nphone:  XXX-XXX-XXXX\r\n\r\n' 
Name<- grep('\nName:', example, value = TRUE)
Name

当我希望它只返回“John Smith”时,此代码会返回整个字符串。

有没有办法给grep() 添加一个结束标记?我也尝试过str_extract(),但我无法将我的模式格式化为正则表达式

【问题讨论】:

    标签: r regex substring


    【解决方案1】:

    我们可以使用gsub 来删除包含Name: 的子字符串以及那些在\r 之后开始的字符,方法是匹配模式并替换为空白(""

    gsub(".*Name:\\s+|\r.*", "", example)
    #[1] "John Smith"
    

    【讨论】:

    • 这非常适合我的示例代码,但当我尝试将它实现到我拥有的实际单词 .doc 时却不行。我对正则表达式的理解很低,但是我发现当我将代码修改为gsub(".*\\sName:\\s+|\r.*", "", example)时,它又起作用了
    【解决方案2】:

    我们也可以使用:

    strsplit(stringr::str_extract_all(example,"\\\nName:.*",simplify = T),":  ")[[1]][2]
    #[1] "John Smith"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-11
      相关资源
      最近更新 更多