2011-07-20 73 views
1

是否可以在R的正则表达式中使用存储的变量?R正则表达式存储变量?

比如我想删除周围小数报价在下面的字符串s = "\"Bob\",\"1\",\"Mary\",\"2\"" - 在大多数语言中,你可以做这样的事情sub("\"(\d)\"","$1",s),但我似乎无法找到R.能力任何帮助将不胜感激。

另外作为一个侧面问题R有\d的支持? (它会抛出一个错误,当我尝试它)谢谢

+0

是的,R支持'\ d',但你需要转义\,所以写'\\ d' – Andrie

+0

你也可以用'[:digits:]'来匹配数字。 –

回答

6

我相信这通常被称为反向引用。在R,您可以使用\\ 1 \\ 2等

re.examples <- c(
    'What_are_we_doing?', 
    'Woe, that a young fowl should fly the coop', 
    '2011/12/24', 
    'Subject: More information, then less important stuff.' 
) 

sub("([0-9]+)/([0-9]+)/([0-9]+)","Year is \\1 Month is \\2 Day is \\3",re.examples[3]) 
sub("^([A-Za-z ]+): ([A-Za-z ]+), ([A-Za-z ]+).$","\\2",re.examples[4]) 

我不知道有关R. \ d支持我通常只是用[0-9]无论如何,因为我知道它的工作原理,我发现它更易于阅读。

编辑:@Andrie和@Richie Cotton在评论中提供了两个建议,我将在这里包括其完整性。 [:digits:]的作品,但在我看来,[0-9]的可读性很低。 \ \ d也适用。

+0

太棒了!非常感谢 – Michael