我是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 "
问题在于,当我需要完成时,我会收到一些单词。
答案 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}}是一个匹配任何单个字符的特殊字符(在某些情况下除了换行符)。