【发布时间】:2015-03-31 18:23:00
【问题描述】:
我有一个包含多列的数据集,其中之一 (d$leftContext) 包含以下字符串:
Eens zien of je binnen een paar jaar , wanneer er hier misschien een
Ik zou denken van wel , eens deze kerel verdwenen zullen er nog erger aan de macht komen , mensen , crimineel krankzinnig , en fanatiek godsdienstig genoeg om met atoombommen naar het westen te smijten...Die
Die
Die
Als de
对于其中的每一个,我只想返回最后四个单词。我首先想用正则表达式来实现这一点,但我很确定当字符串短于四个单词时这将不起作用(后三种情况就是这种情况)。此外,当单词之间存在除 spacew 以外的任何其他字符时(如第二行的情况),我提出的正则表达式将不起作用。查看我的正则表达式 here 的示例。
.*(?=(\b\w+\s){4}$)
那么,我怎样才能去掉 R 中的最后四个单词(和它们之间的所有内容)?
对于上面显示的块,结果看起来像(如果没有足够的存在,保留最后四个单词或更少):
er hier misschien een
westen te smijten...Die
Die
Die
Als de
【问题讨论】:
-
如果需要最后4个字
sapply(strsplit(d1[,1], ' '), tail,4) -
首先要意识到的是,正则表达式和 R 都使用反斜杠作为转义字符,因此在使用 R 的系统 PCRE 库的包装器创建模式字符串时,您需要将“\”加倍。
-
@BondedDust 我在 JavaScript 中使用 Regex 有经验,但我仍在尝试找出应该在 R 中转义的字符...似乎无法在网上找到任何列表!
-
@BramVanroy 您能否更新预期结果以避免混淆
-
@akrun 完成。我认为您的解决方案会起作用,只是在第二种情况下不起作用。例如,如果您将
4更改为1,则输出将为smijten...Die而不仅仅是Die。