←
PDF 237 / 520 Exercises
→
English · PDF 237
Original PDF page 237
中文 · PDF 237

请注意,匹配结果永远不会重叠。例如,在 "abababa" 中,模式 "aba" 会匹配多少次?正则表达式给出的答案是两次,而不是三次:

str_count("abababa", "aba") #> [1] 2 str_view_all("abababa", "aba")

注意这里使用了 str_view_all()。你很快就会了解到,许多 stringr 函数都是成对出现的:一个函数处理单个匹配,另一个函数处理所有匹配。后一个函数会带有 _all 后缀。

练习题

    1. 对于以下每个挑战,请尝试分别用单个正则表达式和多个 str_detect() 调用的组合来求解:
    • a. 找出所有以 x 开头或结尾的单词。
    • b. 找出所有以元音开头、以辅音结尾的单词。
    • c. 是否有单词包含每一种不同的元音至少各一个?
    • d. 哪个单词包含的元音数量最多?哪个单词的元音占比最高?(提示:分母是什么?)

提取匹配结果

要提取匹配结果的实际文本,可以使用 str_extract()。为了演示它的用法,我们需要一个更复杂的示例。我将使用 哈佛句子,它们最初是为测试 VOIP 系统而设计的,但也很适合用来练习正则表达式。这些句子包含在 stringr::sentences 中:

length(sentences) #> [1] 720 head(sentences) #> [1] "The birch canoe slid on the smooth planks." #> [2] "Glue the sheet to the dark blue background."