为性侵犯命名字符串准备

时间:2017-07-21 15:09:20

标签: r regex string stringr

我是R的新手,我需要准备一列名字然后归咎于性,但我在编写字符串方面遇到了一些问题,特别是这是我所拥有的一个例子:

名称示例:

"alberto eduardo etchegaray de la cerda ."

我需要做的是消除所有“de”“del”“lo”“los”“la”“las”“双白空间”“字符串空格的结尾”以及干扰名称的所有内容

到目前为止我的代码清理字符串是(在第二行我将消除空格):

str_replace_all('alberto eduardo etchegaray de la cerda',
                '\\bdel*\\b|\\blos*\\b|\\blas*\\b|.$',
                replacement=" ")

结果:

"alberto eduardo etchegaray     cerd "

问题在于,当我需要完成时,我会收到一些单词。

2 个答案:

答案 0 :(得分:2)

使用此正则表达式:

str_replace_all(name,'\\b(del?|los?|las?)\\b|\\.',replacement=" ")

结果:

"alberto eduardo etchegaray     cerda  "

您还可以使用以下正则表达式来避免插入双重空格:

str_replace_all(name,'\\s?\\b(del?|los?|las?)\\b|\\.',replacement="")

结果:

"alberto eduardo etchegaray cerda "

答案 1 :(得分:0)

其他人已经为你提供了更好的正则表达式,但没有解释为什么你的改变" cerda"到了" cerd"。 (我建议使用R. Schifini的那个,因为它非常清楚。

正则表达式的问题是最后的.$。这告诉函数(如果在检查其他备选方案之后)它找到任何字符后跟字符串的结尾,以替换最后一个字符(使用空格)。在您的第一个示例字符串中有一个最终.,但在您传递给str_replace_all的字符串中,最后一个字符是" a" in" cerda"正在被取代。我希望您真正想要做的是替换字符串末尾的文字.,因此您需要\\.$[.]$来匹配文字句点,因为未转义. 1}}是一个匹配任何单个字符的特殊字符(在某些情况下除了换行符)。