在R中,我有一个列,应该只包含一个单词。它是通过接受另一列的内容并使用regex只保留最后一个单词来创建的。但是,对于某些行,这不起作用,在这种情况下,R只是从第一列复制内容。这是我的R
df$precedingWord <- gsub(".*?\\W*(\\w+-?)\\W*$","\\1", df$leftContext, perl=TRUE)precedingWord应该只包含一个单词。它是用正则表达式从leftContext中提取的。总体来说,这是很好的,,但是没有使用决定论。在leftContext中,有几行字母带有像é和à这样的对话词。由于某种原因,R完全忽略了这些项,只需将整个内容复制到precedingWord。我觉得这很奇怪,因为正则表达式几乎不可能匹配整个事件-正如您可以看到的这里。在这个例子中,Test是leftContext,替换应该是*在Test前面。
正如您在上面的示例中所看到的,在线regex测试器中的输出与我获得的输出不同。我只是得到了leftContext的精确副本。这并不意味着在线测试器中的输出就是所需要的。现在,这个工具将带有对话词的字母视为非单词字符,因此它不会将其标记为我想要的输出。但实际上,我想威胁他们作为字字符,使他们有资格输出。
如果这是输入:
Un premier projet prévoit que l'établissement verserait 11 FF par an et par élève du secondaire et 30 FF par étudiant universitaire, une somme à évaluer et à
Outre le prêt-à-
And à
Sur base de ces données, on cherchera à
Ce sera encore le cas ce vendredi 19 juillet dans l'é这就是我所期望的输出
à
prêt-à-
à
à
é这是我已经拥有的大器
.*?\W*(\w+?-?)\W*$我已经在我的项目中使用了stringi i,所以如果这提供了一个解决方案,我可以使用它。
发布于 2015-07-28 07:24:45
在Perl类regex中,可以将任何Unicode字母与\p{L}速记类匹配,并且所有非Unicode字符都可以与反向类\P{L}匹配。请参阅regular-expressions.info
您可以将属于“信函”类别的单个字符与
\p{L}匹配。您可以将不属于该类别的单个字符与\P{L}匹配。
因此,您可以使用的正则表达式是
df$precedingWord <- gsub(".*?\\P{L}*(\\p{L}+-?)\\P{L}*$","\\1", df$leftContext, perl=TRUE)https://stackoverflow.com/questions/31639977
复制相似问题