R中的变音符号和正则表达式

时间:2015-07-26 17:37:15

标签: regex r diacritics

在R中我有一个列应该只包含一个单词。它是通过获取另一列的内容而创建的,并且只使用正则表达式保留最后一个单词。但是,对于某些行,这不起作用,在这种情况下,R只是复制第一列中的内容。这是我的R

df$precedingWord <- gsub(".*?\\W*(\\w+-?)\\W*$","\\1", df$leftContext, perl=TRUE)

precedingWord只能包含一个单词。它是从带有正则表达式的leftContext中提取的。这总体上很好,没有变音符号。 leftContext中的几行包含带有变音符号的字母,例如éà。出于某种原因,R 完全忽略这些项目,并简单地将整个事物复制到precedingWord。我发现这很奇怪,因为正则表达式几乎不可能匹配整个事物 - 你可以看到here。在示例中,测试字符串是leftContext,替换应该是* precedingWord。

正如您在上面的示例中所看到的,在线正则表达式测试器中的输出与我得到的输出不同。我只是得到了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,所以如果它提供了一个解决方案,我可以使用它。

1 个答案:

答案 0 :(得分:1)

在类似Perl的正则表达式中,您可以将任何Unicode字母与\p{L}简写类匹配,并且所有非Unicode字符都可以与反向类\P{L}匹配。见regular-expressions.info

  

您可以匹配属于&#34;字母&#34;的单个字符。 \p{L}的类别。您可以将属于该类别的单个字符\P{L}匹配。

因此,您可以使用的正则表达式是

df$precedingWord <- gsub(".*?\\P{L}*(\\p{L}+-?)\\P{L}*$","\\1", df$leftContext, perl=TRUE)