在特定单词后面的逗号上拆分字符串

时间:2011-07-19 08:50:26

标签: regex r

我有一个带名字的向量,例如:

names <- "Jansen, A., Karel, A., Jong, A. de, Pietersen, K."

我希望按名称拆分。在这种情况下,我需要将.,上的向量和de后面的逗号分开(该名称为A. De Jong,这在荷兰语中是典型的。)

现在我做:

 strsplit(names,split="\\.\\,|\\<de\\>,")

但这也会从名称中删除de

[[1]]
[1] "Jansen, A"      " Karel, A"      " Jong, A. "     " Pietersen, K."

如何获得以下结果?

[[1]]
[1] "Jansen, A"      " Karel, A"      " Jong, A. de"     " Pietersen, K."

3 个答案:

答案 0 :(得分:5)

polishchuk的正则表达式需要两次修改才能使它在R中运行。

首先,反斜杠需要转义。其次,对strsplit的调用需要参数perl = TRUE来启用lookbehind。

strsplit(names, split = "\\.,|(?<=de)", perl = TRUE)

给出了Sacha要求的答案。

请注意,这仍然包括de Jong名称中的一个点,并且它不能扩展到van,der等替代品。我建议使用以下替代方案。

names <- "Jansen, A., Karel, A., Jong, A. de, Pietersen, K., Helsing, A. van"
#split on every comma
first_last <- strsplit(names, split = ",")[[1]]
#rearrange into a matrix with the first column representing last names, 
#and the second column representing initials
first_last <- matrix(first_last, byrow = TRUE, ncol = 2) 
#clean up: remove leading spaces and dots
first_last <- gsub("^ ", "", first_last)
first_last <- gsub("\\.", "", first_last)
#combine columns again
apply(first_last, 1, paste, collapse = ", ")

答案 1 :(得分:3)

试试这个正则表达式:\.,|(?<=de),带后瞻。

它将匹配:

Jansen,A ., Karel,A ., Jong,A。de , Pietersen,K。

答案 2 :(得分:1)

我刚刚找到了这个问题的一个非常简单的解决方法,我在这里发帖以供参考。简单地gsub首先将字符串转换为更容易拆分的其他内容:

names <- "Jansen, A., Karel, A., Jong, A. de, Pietersen, K."

names <- gsub("\\<de\\>,","de.,",names)
strsplit(names,split="\\.\\,")
[[1]]
[1] "Jansen, A"      " Karel, A"      " Jong, A. de"   " Pietersen, K."

我想这需要一个单独的gsub()语句用于每种方式(在荷兰语中你有van,der,de,te,ten等),所以它不理想,但得到了完成工作。