問號的兩個意義
當你清楚知道有哪些有效選項,且確定其中一個一定會出現時,or 運算子很實用。但如果你想比對的樣式中,有一部分有時存在、有時不存在呢?這時就用問號 ?:
? 可以讓前一個群組或字元變成可選。即使樣式中的某一部分缺席,加入它後,正則表達式仍然會比對成功。不過要注意,若它放在像 * 或 + 這類乘數之後,問號還有第二種效果:
? 也可以讓前一個乘數變「惰性」而不是「貪婪」。也就是說,正則表達式原本會嘗試匹配最多的字元數量,而加上 ? 後,會改為尋找最少的文字匹配。
本練習屬於課程
R 中級 Regular Expressions
練習說明
- 透過將最後一個
"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 = "___,")