我正在尝试使用R中的正则表达式匹配单词amazon
或mturk
的任何实例。在SO上阅读维基时,我发现说“任何字符”的方式是{{ 1}}。有人能解释为什么这不能给我预期的输出(如下所示)?
.*
目标
data<-data.frame(c("hi"),c("amazon mturk"),c("Amazon"),c("XXXAmazon","mturk.com")) #should return: hi, amazon, amazon, amazon, amazon
data
docs2<-gsub("[.*amazon.*|.*mturk.*]", "amazon",tolower(data), perl=TRUE)
docs2
#test code
gsub("bye","--","hibye")
答案 0 :(得分:1)
每当我需要Regex的复习时,我想咨询这个备忘单: https://www.cs.tut.fi/~jkorpela/perl/regexp.html
那里还有很多交互式模拟器,这是我使用的模拟器: http://www.regexplanet.com/
您的主要错误可能是“[]”。在Perl语法中,括号使匹配能够搜索任何这些字母。
我不知道R,所以我将在Perl中演示这一点。我喂了这个字符串:
$str = "hi amazon mturk Amazon XXXAmazon mturk.com";
当我表演时:
@matches = ($str =~ /[.*amazon.*|.*mturk.*]/g);
我得到了一系列丑陋的单字母匹配,包括句号。但是,你也可以只做一个/或没有括号。例如:
@matches = ($str =~ /amazon|mturk/gi);
给了我:
amazon mturk Amazon Amazon mturk