【问题标题】:Find hyphonated words with Regex in list R在列表 R 中使用 Regex 查找连音字
【发布时间】:2018-04-27 16:48:35
【问题描述】:

我有一串以分号分隔的元素,我想查找一个模式是否与字符串中的任何元素匹配:

string <- "CPT1B;CPT1B;CPT1B;CHKB-CPT1B;CPT1B;CPT1B;CPT1B;CPT1B"

我想知道使用哪个正则表达式来匹配任何这些元素,我的意思是,如果任何元素匹配,例如“CPT1B”,我想得到 TRUE,这样做我使用:

grepl(paste("[^;]","CPT1B,"[$;]",sep = ""),string)
TRUE

我使用了“[^;]”和“[$;]”,因为如果任何元素匹配,我想得到 TRUE。

当我尝试匹配“CHKB-CPT1B”时出现问题,因为如果我使用相同的表达式:

grepl(paste("[^;]","CHKB-CPT1B","[$;]",sep = ""),string)
FALSE

我得到了 FALSE,我认为这是由于单词中的连字符,我想知道如何让 grepl 读取带有连字符的单词。

我不想使用“CHKB\-CPT1B”,因为这个模式来自一个可以是连字符和非连字符的迭代器。而且我也不想用“;”分割原始字符串

【问题讨论】:

    标签: r regex grepl hyphen


    【解决方案1】:

    您需要使用交替组:

    grepl(paste0("(?:^|;)", "CPT1B", "(?:$|;)"),string)
    [1] TRUE
    

    (?:^|;) 非捕获组匹配字符串开头或;(?:$|;) 匹配字符串结尾或;

    您也可以使用带有perl=TRUE 的环视(即PCRE 模式):

    grepl(paste0("(?<![^;])", "CPT1B", "(?![^;])"),string, perl=TRUE)
    

    这里,否定的后向查找(?&lt;![^;]) 匹配任何紧跟在; 或字符串开头的位置,而否定的前瞻(?![^;]) 要求下一个字符是; 或字符串位置的末尾。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    相关资源
    最近更新 更多