R正则表达式:grep不包括连字符/破折号作为边界
发布时间:2020-12-14 05:56:08 所属栏目:百科 来源:网络整理
导读:我试图在一个带有变量字符串的向量中匹配一个确切的单词.为此,我使用边界.但是,我想连字符/破折号不被视为单词边界.这是一个例子: vector-c( "ARNT","ACF,ASP,ACF64","BID","KTN1,KTN","NCRNA00181,A1BGAS,A1BG-AS","KTN1-AS1") 要匹配包含“KTN1”的字符串
我试图在一个带有变量字符串的向量中匹配一个确切的单词.为此,我使用边界.但是,我想连字符/破折号不被视为单词边界.这是一个例子:
vector<-c( "ARNT","ACF,ASP,ACF64","BID","KTN1,KTN","NCRNA00181,A1BGAS,A1BG-AS","KTN1-AS1") 要匹配包含“KTN1”的字符串,我正在使用: grep("(?i)(?=.*bKTN1b)",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("bKTN1b(?!-)",KTN" 返回包含字符串KTN1后面没有连字符的元素. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |