Lots of work on 3 general strategies
This commit is contained in:
28
strings.Rmd
28
strings.Rmd
@@ -620,30 +620,4 @@ The are a bunch of other places you can use regular expressions outside of strin
|
||||
head(dir(pattern = "\\.Rmd$"))
|
||||
```
|
||||
|
||||
(If you're more comfortable with "globs" like `*.Rmd`, you can convert them to regular expressions with `glob2rx()`):
|
||||
|
||||
## Strategies
|
||||
|
||||
Don't forget that you're in a programming language and you have other tools at your disposal.
|
||||
Instead of creating one complex regular expression, it's often easier to write a series of simpler regexps.
|
||||
If you get stuck trying to create a single regexp that solves your problem, take a step back and think if you could break the problem down into smaller pieces, solving each challenge before moving onto the next one.
|
||||
|
||||
A regular expression is a program that must be written in a single string, and has no debugger, no built-in documentation.
|
||||
|
||||
### Using multiple regular expressions
|
||||
|
||||
When you have complex logical conditions (e.g. match `a` or `b` but not `c` unless `d`) it's often easier to combine multiple `str_detect()` calls with logical operators instead of trying to create a single regular expression.
|
||||
For example, here are two ways to find all words that don't contain any vowels:
|
||||
|
||||
```{r}
|
||||
# Find all words containing at least one vowel, and negate
|
||||
no_vowels_1 <- !str_detect(words, "[aeiou]")
|
||||
# Find all words consisting only of consonants (non-vowels)
|
||||
no_vowels_2 <- str_detect(words, "^[^aeiou]+$")
|
||||
identical(no_vowels_1, no_vowels_2)
|
||||
```
|
||||
|
||||
The results are identical, but I think the first approach is significantly easier to understand.
|
||||
If your regular expression gets overly complicated, try breaking it up into smaller pieces, giving each piece a name, and then combining the pieces with logical operations.
|
||||
|
||||
### Repeated `str_replace()`
|
||||
(If you're more comfortable with "globs" like `*.Rmd`, you can convert them to regular expressions with `glob2rx()`).
|
||||
|
||||
Reference in New Issue
Block a user