text: Title: [ENH] Allow substring and regex matching in find_replace
  Body: # Brief Description
  
  <!-- Please provide a brief description of what you'd like to propose. -->
  
  Currently `find_replace` only allows exact matching. I have run into use cases for fuzzy/substring match and replace both in my work and in the process of making a pyjanitor example. Was able to implement it by combining pyjanitor function `update_where` and pandas-flavor, but we potentially could make this as a pyjanitor feature--either as part of `find_replace` (for example, by adding a kwarg flag `exact=True/False`), or as a separate function `fuzzy_find_replace`.
  
  # Example API
  
  
  <!-- One of the selling points of pyjanitor is the API. Hence, we guard the API very carefully, and want to
  make sure that it is accessible and understandable to many people. Please provide a few examples of what the API
  of the new function you're proposing will look like. We have provided an example that you should modify. -->
  
  For example, in the example [Tidy Up Web-Scraped Media Franchise Data](https://pyjanitor.readthedocs.io/notebooks/medium_franchise.html), when trying to implement a python equivalence of the following R snippet:
  ```R
  clean_df <- clean_category %>%
    mutate(revenue_category = case_when(
      str_detect(str_to_lower(revenue_category), "box office") ~ "Box Office",
      str_detect(str_to_lower(revenue_category), "dvd|blu|vhs|home video|video rentals|video sales|streaming|home entertainment") ~ "Home Video/Entertainment",
      str_detect(str_to_lower(revenue_category), "video game|computer game|mobile game|console|game|pachinko|pet|card") ~ "Video Games/Games",
      str_detect(str_to_lower(revenue_category), "comic|manga") ~ "Comic or Manga",
      str_detect(str_to_lower(revenue_category), "music|soundtrack") ~ "Music",
      str_detect(str_to_lower(revenue_category), "tv") ~ "TV",
      str_detect(str_to_lower(revenue_category), "merchandise|licens|mall|stage|retail") ~ "Merchandise, Licensing & Retail",
      TRUE ~ revenue_category))
  ```
  A mapper dictionary could be set up as:
  ```python
  mapper = {
      'box office': 'Box Office',
      'dvd|blu|vhs|home video|video rentals|video sales|streaming|home entertainment': 'Home Video/Entertainment',
      'video game|computer game|mobile game|console|game|pachinko|pet|card': 'Video Games/Games',
      'comic|manga': 'Comic or Manga',
      'music|soundtrac': 'Music',
      'tv': 'TV',
      'merchandise|licens|mall|stage|retail': 'Merchandise, Licensing & Retail',
  }
  ```
  
  If we enable substring matching and regex, the find_replace call could look like this:
  ```python
  df.find_replace(column_name, mapper, exact=False, regex=True)
  ```
  
  If this feature extension could clutter `find_replace`, a separate function could be set up.