R正则表达式:grep不包括连字符/破折号作为边界

前端之家收集整理的这篇文章主要介绍了R正则表达式:grep不包括连字符/破折号作为边界前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在一个带有变量字符串的向量中匹配一个确切的单词.为此,我使用边界.但是,我想连字符/破折号不被视为单词边界.这是一个例子:

vector<-c(    
"ARNT","ACF,ASP,ACF64","BID","KTN1,KTN","NCRNA00181,A1BGAS,A1BG-AS","KTN1-AS1")

要匹配包含“KTN1”的字符串,我正在使用:

grep("(?i)(?=.*\\bKTN1\\b)",vector,perl=T)

但这匹配“KTN1”和“KTN1-AS1”.

有没有办法可以将短划线视为一个角色,以便“KTN1-AS1”被认为是一个完整的单词?

解决方法

要匹配vector元素中的特定单词,需要使用regmatches,str_extract_all(来自stringr包)等函数而不是grep,因为grep只返回找到匹配项的元素索引.

> vector<-c(    
+     "ARNT",+     "ACF,+     "BID",+     "KTN1,+     "NCRNA00181,+     "KTN1-AS1")
> regmatches(vector,regexpr("(?i)\\bKTN1[-\\w]*\\b",perl=T))
[1] "KTN1"     "KTN1-AS1"

要么

> library(stringr)
> unlist(str_extract_all(vector[grep("(?i)\\bKTN1[-\\w]*\\b",vector)],perl("(?i).*\\bKTN1[-\\w]*\\b")))
[1] "KTN1"     "KTN1-AS1"

更新:

> grep("\\bKTN1(?=$|,)",perl=T,value=T)
[1] "KTN1,KTN"

返回包含字符串KTN1后跟逗号或行尾的元素.

要么

> grep("\\bKTN1\\b(?!-)",KTN"

返回包含字符串KTN1后面没有连字符的元素.

猜你在找的正则表达式相关文章