正则表达式根据R中的最后几个字符过滤掉短语

时间:2011-12-27 14:59:16

标签: regex r

我有几个短语如下:

abc_xy_def
abc_xy
abc_vw_def
abc_vw
def_ab

我想使用正则表达式将它们分成两组:一组abc_头部和_def尾部,另一组只有abc_头部。

我尝试过这样的事情:

> grepl("abc_[(a-z_)*][^def]","abc_xy_def")
[1] TRUE
> grepl("abc_[(a-z_)*][^def]","abc_xy")
[1] TRUE

但它不起作用,任何人都可以帮忙吗?感谢。

2 个答案:

答案 0 :(得分:1)

不知道R但这应该有用吗?

grepl("^abc_.+_def$","abc_xy_def")

您似乎误认为“ [^ def] ”的含义,这将匹配一个不是 d e 的字符或 f 所以你的正则表达式“abc _ [(a-z _)*] [^ def]”将匹配任何包含 abc _ 的字符串,后跟一个(, a z _ * 其次是另一个不是 d e f

的字符

在我建议你采取的一切

  • ^ - >我们的意思是看字符串的开头
  • abc _ 将强制执行abc_
  • 。* macth任何字符(不是\ n)0到无限次
  • def 强制def
  • $ 表示我们必须位于字符串
  • 的末尾

如果你想在最后没有_def的情况下尝试这个:"abc_.+(?!def)"

答案 1 :(得分:1)

捕捉所有这些:^abc_[a-z]*(_def|)$

仅使用_def尾部捕获:^abc_[a-z]*_def$

仅在没有_def尾部的情况下捕获:^abc_[a-z]*$

如果不准确,请澄清您的问题。