使用正则表达式修改R中的字符串

时间:2018-04-04 23:09:00

标签: r regex

我已经删除了一个html文件,以使数据集的每个字符向量看起来像:

<h3 class=\"personName\">Whitney  Alicia Zimmerman</h3>                                             <li>Assistant Teaching Professor</li>"

我想使用正则表达式将其修剪为名称和位置(为了澄清,每个向量具有不同的名称和位置)。我以前用过的东西不适用于此(我使用grepl函数来分配我原来的html文件)。我将如何使用正则表达式或其他技术来修剪它?感谢您提前提供任何帮助。

或者如果它更容易使用,我还有两个其他的字符向量将两者分开:

"                                        <h3 class=\"personName\">Whitney  Alicia Zimmerman</h3>"

"                                            <li>Assistant Teaching Professor</li>"

2 个答案:

答案 0 :(得分:1)

您可以使用sub并匹配除了您想要的所有内容。所以我可能会做类似

的事情
test = '<h3 class=\\"personName\\">Whitney  Alicia Zimmerman</h3>  '
sub("<.*", "", sub(".*\">", "", test))

[1] "Whitney  Alicia Zimmerman"

可以修改gsub表达式以消除您想要的任何内容。诀窍是匹配你不想要的东西,并用空字符串代替。

sub的基本结构是sub(match_string, replace_string, target)。查看文档将进一步清除它。我刚刚嵌套了我的sub,所以我可以删除字符串的开头和结尾。

编辑:我包含了你/ Onyambu的建议,因为他是完全正确的。只有sub不需要gsub,就像我最初建议的那样。不同之处在于gsub查找所有匹配项,sub只查找第一个匹配项。

下面他还提供了一个解决方案,只使用一个sub,而不是像我一样。

答案 1 :(得分:1)

如果确实想要使用正则表达式,那么这是一个使用stringr(以及magrittr)的解决方案:

使用你的长字符串:

htmlstring <- c("<h3 class=\"personName\">Whitney  Alicia Zimmerman</h3>                                             <li>Assistant Teaching Professor</li>")  

代码:

library(stringr)
library(magrittr)

ParsedString <- str_replace_all(htmlstring, "<[^>]+>", "") %>% # remove everything between angle brackets, inclusive
                str_squish # remove all extraneous whitespace

输出:

> ParsedString
[1] "Whitney Alicia Zimmerman Assistant Teaching Professor"