我有一个包含actor名称行的dataframe列,如下所示:
r = "c(\"Christian Slater\", \"Tara Reid\", \"Stephen Dorff\", \"Frank C. Turner\")"
我想用“。”之类的替换字符替换每个空格。天真,我以为我能做到这一点:
str_replace_all(r, "\\s", ".")
但是这也会在角色名称之间插入角色。
[1]“c(\”Christian.Slater \“,. \”Tara.Reid \“,。\”Stephen.Dorff \“,。\”Frank.C..Turner \“)”
我尝试过使用匹配组,但是我为什么这不起作用而感到头疼:
str_replace_all(r, "[:alpha:](\\s)[:alpha:]", "\\1.")
[1]“c(\”Christia .later \“,\”Tar .eid \“,\”Stephe .orff \“,\”Fran .. Turner \“)”
任何人都可以解释为什么我与正确的角色不匹配?另一个小问题是我需要正确匹配“。”具有中间首字母的名称的字符,但我认为在基本案例工作之后这将很容易。
答案 0 :(得分:0)
我们可以使用正则表达式外观替换任何不是逗号(,
)的字符后的空格
str_replace_all(r, "(?<!,)\\s+", ".")
#[1] "c(\"Christian.Slater\", \"Tara.Reid\", \"Stephen.Dorff\", \"Frank.C..Turner\")"
或者使用.
str_replace_all(r, "(?<=[a-z])\\s", ".")
#[1] "c(\"Christian.Slater\", \"Tara.Reid\", \"Stephen.Dorff\", \"Frank.C. Turner\")"
或者可能是
str_replace_all(r, "(?<=[A-Za-z])\\.*\\s", ".")
#[1] "c(\"Christian.Slater\", \"Tara.Reid\", \"Stephen.Dorff\", \"Frank.C.Turner\")"
注意:目前尚不清楚预期的输出
答案 1 :(得分:0)
我相信只想要一个。什么时候已经有了。所以
str_replace_all(r, "([:alpha:])\\.?\\s", "\\1.")
[1] "c(\"Christian.Slater\", \"Tara.Reid\", \"Stephen.Dorff\", \"Frank.C.Turner\")"