gsub中的正则表达式无效

时间:2015-03-26 08:28:56

标签: regex r gsub

为什么电子邮件regex提供error invalid regular expression '^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$', reason 'Invalid character range'

blogs.smpl <- "mail:mami@yahoo.com: subject:Lorem Ipsum body:   is simply dummy text of the printing and typesetting industry. 
Lorem Ipsum has been the industry's standard dummy text ever since the 1500s"

blogs.smpl <- gsub("^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$","",blogs.smpl)

2 个答案:

答案 0 :(得分:4)

因为-应该只在字符类的开头或结尾。否则,它表示在它之前和之后的符号之间的范围。

上一个字符类有问题:[a-zA-Z0-9-.]。必须转为[a-zA-Z0-9.-]

注意:在R中,除非使用perl=TRUE,否则无法转义字符类中的连字符以匹配文字连字符。

另外,有关R字符类(第2页)和一般正则表达式的详细信息,请参阅R String Manipulation PDF。这是一段摘录:

  

以下是关于如何将字符匹配为常规的一组规则   字符类中的字符:匹配字符内的]   上课把它放在第一位。

     

要在字符类中匹配-,请将其放在第一位   或者持续。

     

要在字符类中匹配^,请将其放在任何位置,但首先。

     

匹配任何其他字符或元字符(但\)   字符类把它放在任何地方。

答案 1 :(得分:1)

原因是这一部分:

[a-zA-Z0-9-.]

尝试将短划线放在最后:

[a-zA-Z0-9.-]