【问题标题】:Add space between two letters in a string in R [duplicate]在R中的字符串中的两个字母之间添加空格[重复]
【发布时间】:2014-11-12 21:32:19
【问题描述】:

假设我有一个类似的字符串

s = "PleaseAddSpacesBetweenTheseWords"

如何在 R 中使用 gsub 在单词之间添加一个空格以便我得到

"Please Add Spaces Between These Words"

我应该做类似的事情

gsub("[a-z][A-Z]", ???, s)

我要做什么???。此外,我发现 R 的正则表达式文档令人困惑,因此非常感谢 R 中正则表达式的参考或文章。

【问题讨论】:

    标签: regex r gsub


    【解决方案1】:

    您只需要捕获匹配项,然后使用\1 语法来引用捕获的匹配项。例如

    s = "PleaseAddSpacesBetweenTheseWords"
    gsub("([a-z])([A-Z])", "\\1 \\2", s)
    # [1] "Please Add Spaces Between These Words"
    

    当然,这只是在每个小写/大写字母对之间放置一个空格。它不知道什么是真正的“词”。

    【讨论】:

    • 谢谢。 \\1 是否指匹配中的第一个字母,\\2 指第二个字母,等等?为什么需要括号?
    • \\1 指的是与第一组括号内部匹配的内容,类似地,\\2 指的是第二组括号。在这种情况下,两个括号都围绕匹配单个字符的正则表达式。 [a-z] 表示匹配从 a 到 z(小写)的任意字符一次。
    • @Ben Google 寻找“正则表达式备忘单”。这会给你很多有用的信息。
    • "([[:alpha:]])([[:upper:]])" 可能会更好,因为它的区域设置较少,并且会拆分出单字母单词(再次假设每个单词仅在开头大写)。
    • 我假设你知道括号,因为它们是你原来的正则表达式。那些定义了字符类;第一个是小写字母,第二个是大写字母。如果您指的是括号,它们会告诉正则表达式引擎记住字符串的哪个部分与每个特定表达式匹配。如果没有括号,它将无法工作;您不会单独匹配每个字母。