我有几个短语如下:
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
但它不起作用,任何人都可以帮忙吗?感谢。
答案 0 :(得分:1)
不知道R但这应该有用吗?
grepl("^abc_.+_def$","abc_xy_def")
您似乎误认为“ [^ def] ”的含义,这将匹配一个不是 d , e 的字符或 f 所以你的正则表达式“abc _ [(a-z _)*] [^ def]”将匹配任何包含 abc _ 的字符串,后跟一个(, a 至 z , _ ,)或 * 其次是另一个不是 d , e 或 f
的字符在我建议你采取的一切
如果你想在最后没有_def的情况下尝试这个:"abc_.+(?!def)"
答案 1 :(得分:1)
捕捉所有这些:^abc_[a-z]*(_def|)$
仅使用_def
尾部捕获:^abc_[a-z]*_def$
仅在没有_def
尾部的情况下捕获:^abc_[a-z]*$
如果不准确,请澄清您的问题。