grepl 严格匹配单词的某些部分
grepl matching strictly only certain parts of words
我想知道是否有解决方案。
假设我们有一个包含以下内容的列表:
id Item
1 "CRANBERRY 10PKTS CARTON, BLUEBERRY 20PKTS CARTON"
2 "CRANBERRY 10PKTS CARTON,BLUEBERRY 20PKTS CARTON"
3 "CRANBERRY 10PKTS CARTON"
4 "CRANBERRY 30PKTS CARTON"
我想要的是仅匹配 "CRANBERRY" 及其相关名称。这里的症结在于,当存在类似 id1 的东西时,grepl 应该 return 为假,因为它不仅包含蔓越莓,还包含蓝莓。
有没有办法让 grepl 对 id1 和 id2 return false,但对 id3 和 id4 为真?最好只需要一个 grepl 语句就可以解决这个问题。
提前致谢。
根据示例,模式似乎是单词 'CRANBERRY'、'BLUEBERRY' 等在由 ,
分隔的每组单词中出现一次。如果是这种情况,我们可以从字符串 (^
) 的开头匹配句子中的单词 'CRANBERRY',后跟不是 ,
的字符([^,]+
) 直到字符串结尾 ($
)
grepl("^.*\bCRANBERRY[^,]+$", df1$Item)
#[1] FALSE FALSE TRUE TRUE
我想知道是否有解决方案。
假设我们有一个包含以下内容的列表:
id Item
1 "CRANBERRY 10PKTS CARTON, BLUEBERRY 20PKTS CARTON"
2 "CRANBERRY 10PKTS CARTON,BLUEBERRY 20PKTS CARTON"
3 "CRANBERRY 10PKTS CARTON"
4 "CRANBERRY 30PKTS CARTON"
我想要的是仅匹配 "CRANBERRY" 及其相关名称。这里的症结在于,当存在类似 id1 的东西时,grepl 应该 return 为假,因为它不仅包含蔓越莓,还包含蓝莓。
有没有办法让 grepl 对 id1 和 id2 return false,但对 id3 和 id4 为真?最好只需要一个 grepl 语句就可以解决这个问题。
提前致谢。
根据示例,模式似乎是单词 'CRANBERRY'、'BLUEBERRY' 等在由 ,
分隔的每组单词中出现一次。如果是这种情况,我们可以从字符串 (^
) 的开头匹配句子中的单词 'CRANBERRY',后跟不是 ,
的字符([^,]+
) 直到字符串结尾 ($
)
grepl("^.*\bCRANBERRY[^,]+$", df1$Item)
#[1] FALSE FALSE TRUE TRUE