更换R(gsub)中的大小写字母

时间:2016-11-03 13:55:56

标签: r regex

我想在文本中替换所有的变音符号(德语)。以下是我的文字的一部分:

temp.RData enthalten die täglichen Niederschlagsmengen\nund die stündlichen Durchschnittstemperaturen von 1.7.2016 (1 Uhr) bis\n26.9.2016

所以我想用英语类似物(ae,ue,oe)替换ä,ü和ö等所有字母

这是我的代码:

text <- gsub(pattern = '[Ää]',replacement = "ae",text)
text <- gsub(pattern = '[Üü]',replacement = "ue",text)
text <- gsub(pattern = '[Öö]',replacement = "oe",text)

一切都运行正常,除了变形符号(Ä,Ü,Ö)被类似物取代,类似物从小写字母开始。但我想用Ae(不是ae)代替Ä。如何仅在R?

中使用regex来执行此操作

2 个答案:

答案 0 :(得分:2)

最简单的方法,特别是如果你想要有选择性,就是把它分开:

text <- gsub(pattern = '[ä]',replacement = "ae",text)
text <- gsub(pattern = '[ü]',replacement = "ue",text)
text <- gsub(pattern = '[ö]',replacement = "oe",text)
text <- gsub(pattern = '[Ä]',replacement = "Ae",text)
text <- gsub(pattern = '[Ü]',replacement = "Ue",text)
text <- gsub(pattern = '[Ö]',replacement = "Oe",text)

如果您想要更有效的方式,可以使用stringr

library(stringr) 
str_replace_all(text, c('ä' = 'ae', 'ë' = 'ee', 'ï' = 'ie', 'ö' = 'oe',
                        'ü' = 'ue', 'Ä' = 'Ae', 'Ë' = 'Ee', 'Ï' = 'Ie',
                        'Ö' = 'Oe', 'Ü' = 'Ue'))

答案 1 :(得分:0)

使用Unicode-smart stringi 包时,这是一种更快速,更简约的方法:

var result = db.Notes.GroupBy(n => n.PersonId)
                     .Select(g => new NoteGrp
                      {
                          PersonID = g.Key,
                          Notes = g.Select(x => x.NoteText)
                      });

public class NoteGrp
{
    public int PersonID { get; set; }
    public IEnumerable<string> Notes { get; set; }
    ...

    public string Note
    { get { return string.Join(", ", Notes); } }
}

txt <- "A: Äbel bäbel, O: Öber öber, U: Über über gemütlich" stringi:: stri_replace_all_fixed(txt, c("ä", "ü", "ö", "Ä", "Ü", "Ö"), c("ae", "ue", "oe", "Ae", "Ue", "Oe"), vectorize_all = FALSE) ## [1] "A: Aebel baebel, O: Oeber oeber, U: Ueber ueber gemuetlich" 表示您的替换是逐个元素的,并且使其成为固定模式替换使其尽可能快。