【问题标题】:Diacritics and regular expressions in RR中的变音符号和正则表达式
【发布时间】:2015-10-16 20:44:51
【问题描述】:

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

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

precedingWord 应该只包含一个单词。它是用正则表达式从 leftContext 中提取的。这总体上效果很好,不适用于变音符号。 leftContext 中的几行包含带有变音符号的字母,例如éà。出于某种原因,R 忽略这些项目完全并简单地将整个内容复制到precedingWord。我觉得这很奇怪,因为正则表达式几乎不可能匹配整个事物 - 正如您所看到的 here。在示例中,Test string 是 leftContext,Substitution 应该是 *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,所以如果它提供了一个解决方案,我可以使用它。

【问题讨论】:

  • 使用\p{L} - df$precedingWord &lt;- gsub(".*?\\P{L}*(\\p{L}+-?)\\P{L}*$","\\1", df$leftContext, perl=TRUE)
  • @AvinashRaj 查看我的编辑。
  • df$precedingWord &lt;- gsub(".*?\\b([\\w-]+) *$", "\\1", df$leftContext, perl=TRUE)怎么样
  • @stribizhev 你能把它作为答案发布吗?我很乐意接受。

标签: regex r diacritics


【解决方案1】:

在类似 Perl 的正则表达式中,您可以将任何 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-27
    • 2017-06-17
    • 2012-03-05
    • 2011-08-13
    • 2012-06-22
    • 2013-04-02
    • 1970-01-01
    相关资源
    最近更新 更多