开始使用免费开始使用

问号及其两层含义

当您明确知道哪些选项是有效的,并且确定其中一个一定会出现时,或运算符很有用。但如果您要匹配的模式中,有一部分有时出现、有时不出现,该怎么办?这就是问号 ? 派上用场的时候:

? 可以将其前面的分组或字符设为可选。借助它,即使模式的某一部分缺失,正则表达式也能匹配到。但请注意,如果它跟在 *+ 这样的量词后面,问号还会产生第二种效果:

? 还可以让其前面的量词变"惰性"(lazy),而不是"贪婪"(greedy)。也就是说,正则表达式不再寻找尽可能多的字符,? 会让它去匹配尽可能少的文本。

本练习是课程的一部分

R 中级正则表达式

查看课程

练习说明

  • 通过将最后一个 "s" 设为可选,既匹配单数 "Screen",也匹配复数 "Screens"
  • 使用 .* 在逗号前匹配任意数量的任意字符。
  • 在星号后加上问号 ? 来匹配相同的模式——您能看出区别吗?

交互式实操练习

通过完成这段示例代码来试试这个练习。

# Match both Screen and Screens by making the last "s" optional
str_match(lines, pattern = "Screens___")

# Match a random amount of arbitrary characters, followed by a comma
str_match(lines, pattern = "___,")

# Match the same pattern followed by a comma, but the "lazy" way
str_match(lines, pattern = "___,")
编辑并运行代码