gpt4 book ai didi

regex - R 正则表达式 : grep excluding hyphen/dash as boundary

转载 作者:行者123 更新时间:2023-12-04 23:46:54 25 4
gpt4 key购买 nike

我正在尝试将向量中的确切单词与变量字符串进行匹配。为此,我正在使用边界。但是,我希望连字符/破折号不被视为单词边界。下面是一个例子:

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”视为一个完整的词?

最佳答案

要匹配向量元素中的特定单词,您需要使用类似 regmatches 的函数。 , str_extract_all (来自 stringr 包)不是 grep,因为 grep 只会返回找到匹配项的元素索引。

> vector<-c(    
+ "ARNT",
+ "ACF, ASP, ACF64",
+ "BID",
+ "KTN1, KTN",
+ "NCRNA00181, A1BGAS, A1BG-AS",
+ "KTN1-AS1")
> regmatches(vector, regexpr("(?i)\\bKTN1[-\\w]*\\b", vector, 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(?=$|,)", vector, perl=T, value=T)
[1] "KTN1, KTN"

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

或者
> grep("\\bKTN1\\b(?!-)", vector, perl=T, value=T)
[1] "KTN1, KTN"

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

关于regex - R 正则表达式 : grep excluding hyphen/dash as boundary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29223862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com