正如你在上一课中看到的,Kleene 星号(*)和加号(+)允许我们匹配一行中重复出现的字符。
另一个在文本匹配和提取中非常常用的数量修饰符是问号(?)这个元字符,它表示可选性。这个元字符允许你匹配前一个字符或分组出现 0 次或 1 次。例如,正则表达式 ab?c 可以匹配 "abc" 或 "ac",因为其中的 b 被视为可选项。
和点号(.)一样,问号(?)也是一个特殊字符。如果你想匹配字符串中真正的问号符号,必须使用反斜杠进行转义:\?。
在下面的字符串中,请注意单词 "file" 的复数形式取决于找到的文件数量。试着编写一个使用可选性元字符的正则表达式,只匹配那些找到一个或多个文件的行。
| Task | Text | |
| 匹配 | 1 file found? | ![]() |
| 匹配 | 2 files found? | ![]() |
| 匹配 | 24 files found? | ![]() |
| 跳过 | No files found. | ![]() |
| 提示 | 我们可以使用元字符 \d 来匹配文件数量,并使用正则表达式 \d+ files? found\? 来匹配所有找到了文件的行。请注意,第一个问号作用于前面的 's' 字符(用于表示复数形式);而末尾真正的问号符号则必须使用反斜杠进行转义,才能匹配文本中的问号本身。 |