【发布时间】:2021-01-13 05:29:06
【问题描述】:
我对需要选择字符串的第二个空格的正则表达式模式感到困惑。我已经尝试了谷歌的前 5 页,我想出的只是选择直到第二个空格的所有内容,我只想选择第二个空格本身。
这是我目前所拥有的。
txt <- "the duck is yellow"
str_extract(txt,"(?:[\\w]*)(?:[\\s])(?:[\\w]*)([\\s])")
我尝试的另一个正则表达式是:
(\w+\s\w+\s){2}
我只是无法找到解释如何获得某个字符的第二次出现的来源。我认为这样的事情会很简单。
最终我想在第二个空格处将文本分成两列。
【问题讨论】:
-
在正则表达式中,通过定义捕获组来获取第二个空格并使用
\2引用第二个组也不错。但是,如果您使用例如tidyr::separate,那将不会对您有太大帮助。相反,我只需将空格处的separate分成 3 列(使用extra = "merge")参数,然后重新组合前两列。 -
另一个技巧是将第一个空格替换为在您的数据中不太可能出现的特定字符串(例如,
"!FIRSTSPACE!"),然后在第一个空格处分隔,然后返回原始通过用空格替换特定字符串。 -
您可以尝试使用控制动词跳过第一个空格而不使用捕获组:
^.*?\s(*SKIP)(*F)|\s -
感谢大家的帮助。我使用了下面的 tidyr::extract 方法,效果很好。很高兴能得到一些想法来帮助我跳出框框思考。