在R中将gsub错误从大写变为小写

时间:2015-06-05 10:37:47

标签: regex r gsub

我想重新编码一些标识符,从大写到小写。

我不确定这里的问题是什么。

n = c('AFD.434', 'BSD.23', 'F234.FF')
gsub(pattern = '[[:upper:]]', replacement = '[[:lower:]]', n)

[1] "[[:lower:]][[:lower:]][[:lower:]].434" "[[:lower:]][[:lower:]][[:lower:]].23"  "[[:lower:]]234.[[:lower:]][[:lower:]]"

有什么建议吗?

2 个答案:

答案 0 :(得分:11)

您的gsub调用将每个匹配项替换为文字字符串" [[:lower:]]"。

最简单的解决方案是不使用正则表达式;只需使用tolower()(已在评论/其他答案中提及)。

使用正则表达式的一种可能方法是使用Perl扩展模式和\L修饰符转换为小写:

gsub(pattern = '([[:upper:]])', perl = TRUE, replacement = '\\L\\1', n)

这种方法

  • 使用捕获组(...)来记住"比赛
  • 使用反向引用\1来引用替换字符串中的匹配
  • 使用\L修饰符将匹配项转换为小写

有关详细信息,请参阅gsub的在线帮助。

答案 1 :(得分:1)

gsub函数将正则表达式作为第一个参数,将替换字符串作为第二个,不能使用正则表达式中使用的特殊字符/类。他们被视为文字。因此,您尝试使用文字字符串[[:lower:]]替换每个大写字母(请参阅my demo)。

要将数据框的值设置为小写,必须使用tolower()(已经指出):

n = c('AFD.434', 'BSD.23', 'F234.FF')
tolower(n)

请参阅demo

输出:

[1] "afd.434" "bsd.23"  "f234.ff"

请注意,当我们需要对字符串的特定部分进行大写时,Franks建议使用Perl \L运算符很方便,但在您的情况下,这似乎是一种不必要的开销。