正規表現の「否定先読み」「肯定先読み」「否定後読み」「肯定後読み」をRでやりたかった。
実例で学ぶ正規表現の「否定先読み」「肯定先読み」「否定後読み」「肯定後読み」 #正規表現 - Qiita
| 書き方 | 名前 | 意味 |
| (?=pattern) | 肯定先読み | 直後にpatternがある |
| (?!pattern) | 否定先読み | 直後にpatternが無い |
| (?<=pattern) | 肯定後読み | 直前にpatternがある |
| (?<!pattern) | 否定後読み | 直前にpatternが無い |
例えば、【】の中に含まれるテキストを抽出しようと思ったら、この方法をしらなかった以前のアホな自分は、
stringr::str_extract(text, "【.+?】")
としてから、【】を削除する、ということをしていたわけであるが、これを使うと、抽出の時点で、目的の【】の中のテキストだけ取得することができる。
text <- "長いテキストの中から【かっこのなかの文章を】抽出してみましょう" pat <- c("肯定先読み"="?=", "否定先読み"="?!", "肯定後読み"="?<=", "否定後読み"="?<!") p <- c(outer(sprintf("(%s【).+", pat), sprintf("(%s】)", pat), paste0)) result <- mapply(stringr::str_extract, text, p)
肯定先読み 肯定先読み (?=【).+(?=】) 【かっこのなかの文章を 否定先読み 肯定先読み (?!【).+(?=】) 長いテキストの中から【かっこのなかの文章を 肯定後読み 肯定先読み (?<=【).+(?=】) かっこのなかの文章を 否定後読み 肯定先読み (?<!【).+(?=】) 長いテキストの中から【かっこのなかの文章を 肯定先読み 否定先読み (?=【).+(?!】) 【かっこのなかの文章を】抽出してみましょう 否定先読み 否定先読み (?!【).+(?!】) 長いテキストの中から【かっこのなかの文章を】抽出してみましょう 肯定後読み 否定先読み (?<=【).+(?!】) かっこのなかの文章を】抽出してみましょう 否定後読み 否定先読み (?<!【).+(?!】) 長いテキストの中から【かっこのなかの文章を】抽出してみましょう 肯定先読み 肯定後読み (?=【).+(?<=】) 【かっこのなかの文章を】 否定先読み 肯定後読み (?!【).+(?<=】) 長いテキストの中から【かっこのなかの文章を】 肯定後読み 肯定後読み (?<=【).+(?<=】) かっこのなかの文章を】 否定後読み 肯定後読み (?<!【).+(?<=】) 長いテキストの中から【かっこのなかの文章を】 肯定先読み 否定後読み (?=【).+(?<!】) 【かっこのなかの文章を】抽出してみましょう 否定先読み 否定後読み (?!【).+(?<!】) 長いテキストの中から【かっこのなかの文章を】抽出してみましょう 肯定後読み 否定後読み (?<=【).+(?<!】) かっこのなかの文章を】抽出してみましょう 否定後読み 否定後読み (?<!【).+(?<!】) 長いテキストの中から【かっこのなかの文章を】抽出してみましょう
| 肯定先読み 肯定先読み | (?=【).+(?=】) | 【かっこのなかの文章を |
| 否定先読み 肯定先読み | (?!【).+(?=】) | 長いテキストの中から【かっこのなかの文章を |
| 肯定後読み 肯定先読み | (?<=【).+(?=】) | かっこのなかの文章を |
| 否定後読み 肯定先読み | (?<!【).+(?=】) | 長いテキストの中から【かっこのなかの文章を |
| 肯定先読み 否定先読み | (?=【).+(?!】) | 【かっこのなかの文章を】抽出してみましょう |
| 否定先読み 否定先読み | (?!【).+(?!】) | 長いテキストの中から【かっこのなかの文章を】抽出してみましょう |
| 肯定後読み 否定先読み | (?<=【).+(?!】) | かっこのなかの文章を】抽出してみましょう |
| 否定後読み 否定先読み | (?<!【).+(?!】) | 長いテキストの中から【かっこのなかの文章を】抽出してみましょう |
| 肯定先読み 肯定後読み | (?=【).+(?<=】) | 【かっこのなかの文章を】 |
| 否定先読み 肯定後読み | (?!【).+(?<=】) | 長いテキストの中から【かっこのなかの文章を】 |
| 肯定後読み 肯定後読み | (?<=【).+(?<=】) | かっこのなかの文章を】 |
| 否定後読み 肯定後読み | (?<!【).+(?<=】) | 長いテキストの中から【かっこのなかの文章を】 |
| 肯定先読み 否定後読み | (?=【).+(?<】) | 【かっこのなかの文章を】抽出してみましょう |
| 否定先読み 否定後読み | (?!【).+(?<!】) | 長いテキストの中から【かっこのなかの文章を】抽出してみましょう |
| 肯定後読み 否定後読み | (?<=【).+(?<!】) | かっこのなかの文章を】抽出してみましょう |
| 否定後読み 否定後読み | (?<!【).+(?<!】) | 長いテキストの中から【かっこのなかの文章を】抽出してみましょう |










