问号及其两层含义
当您明确知道哪些选项是有效的,并且确定其中一个一定会出现时,或运算符很有用。但如果您要匹配的模式中,有一部分有时出现、有时不出现,该怎么办?这就是问号 ? 派上用场的时候:
? 可以将其前面的分组或字符设为可选。借助它,即使模式的某一部分缺失,正则表达式也能匹配到。但请注意,如果它跟在 * 或 + 这样的量词后面,问号还会产生第二种效果:
? 还可以让其前面的量词变"惰性"(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 = "___,")