【问题标题】:grepl matching strictly only certain parts of wordsgrepl 仅严格匹配单词的某些部分
【发布时间】:2017-01-26 04:39:37
【问题描述】:

我需要知道是否有解决方案。

假设我们有一个包含以下内容的列表:

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 应该返回 false,因为它不仅包含蔓越莓,还包含蓝莓。

有没有办法让 grepl 为 id1 和 id2 返回 false,但为 id3 和 id4 返回 true?最好只用一个 grepl 语句来解决问题。

提前致谢。

【问题讨论】:

    标签: r grepl


    【解决方案1】:

    根据示例,该模式似乎是单词“CRANBERRY”、“BLUEBERRY”等在由, 分隔的每组单词中出现一次。如果是这种情况,我们可以从字符串的开头 (^) 匹配句子中的单词“CRANBERRY”,然后是不是, ([^,]+) 的字符,直到字符串的结尾 ( $)

    grepl("^.*\\bCRANBERRY[^,]+$", df1$Item)
    #[1] FALSE FALSE  TRUE  TRUE
    

    【讨论】:

    • 我想我理解开头,但不理解 []。这里的 [] 是作为 grepl 可以看到的“附件”还是排序?
    • @bzzbzzRzzbzz 在[] 中,我们使用^, 匹配一个或多个不是, 的(+) 字符。所以基本上,我们正在根据显示的示例消除其他单词的可能性,例如BLUEBERRY
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    相关资源
    最近更新 更多