7.20. Extract the Drive Letter from a Windows Path
Problem
You have a string that holds a (syntactically) valid path to a
file or folder on a Windows PC or network. You want to extract the drive letter, if any, from the
path. For example, you want to extract c from c:\folder\file.ext.
Solution
^([a-z]):
| Regex options: Case insensitive |
| Regex flavors: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby |
Discussion
Extracting the drive letter from a string known to hold a valid path is trivial, even if you don’t know whether the path actually starts with a drive letter. The path could be a relative path or a UNC path.
Colons are invalid characters in Windows paths, except to delimit the drive letter. Thus, if we have a letter followed by a colon at the start of the string, we know the letter is the drive letter.
The anchor ‹^›
matches at the start of the string (Recipe 2.5). The fact that the caret also matches
at embedded line breaks in Ruby doesn’t matter, because valid Windows
paths don’t include line breaks. The character class ‹[a-z]› matches a single letter
(Recipe 2.3). We place the character class
between a pair of parentheses (which form a capturing group) so you
can get the drive letter without the literal colon that is also
matched by the regular expression. We add the colon to the regular
expression to make sure we’re extracting the drive letter, rather than
the first letter in a relative path.
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access