代码之家  ›  专栏  ›  技术社区  ›  ℕʘʘḆḽḘ

如何在stringr中使用单词边界[[副本]

  •  0
  • ℕʘʘḆḽḘ  · 技术社区  · 3 年前

    > str_detect('the U.S. have been', regex('\\bu\\.s\\.',ignore_case = TRUE))
    [1] TRUE
    > str_detect('the U.S. have been', regex('\\bu\\.s\\.\\b',ignore_case = TRUE))
    [1] FALSE
    

    为什么在第二种情况下匹配失败?在“have”之前不是有一个词的边界吗?

    谢谢!

    2 回复  |  直到 3 年前
        1
  •  2
  •   akrun    3 年前

    我们可以用 \\s

     str_detect('the U.S. have been', regex('\\bu\\.s\\.\\s',ignore_case = TRUE))
    
        2
  •  2
  •   Calum You    3 年前

    尝试运行以下命令以查看问题:

    str_view_all('the U.S. have been', regex('\\b', ignore_case = TRUE))
    

    \b 匹配单词边界,即从单词字符(字母、标记和小数)到非单词字符的转换。这里,从 S . 是一个词的边界,因为 . . 不是。所以你的第二个模式不匹配(没有 . 紧接着一个词的边界)