title: Python Case Insensitive Replace All of multiple strings
body: <p>I want to replace all occurrences of a set of strings in a text line.  I came up with this approach, but I am sure there is a better way of doing this:</p>
  
  <pre><code>myDict = {}
  test = re.compile(re.escape('pig'), re.IGNORECASE)
  myDict['car'] = test
  test = re.compile(re.escape('horse'), re.IGNORECASE)
  myDict['airplane'] = test
  test = re.compile(re.escape('cow'), re.IGNORECASE)
  myDict['bus'] = test
  
  mystring = 'I have this Pig and that pig with a hOrse and coW'
  
  for key in myDict:      
      regex_obj = myDict[key]
      mystring = regex_obj.sub(key, mystring)
  
  print mystring
  </code></pre>
  
  <p>I have this car and that car with a airplane and bus</p>
  
  <p>Based on @Paul Rooney's answer below, ideally I would do this:</p>
  
  <pre><code>def init_regex():
      rd = {'pig': 'car', 'horse':'airplane', 'cow':'bus'}
      myDict = {}
      for key,value in rd.iteritems():
          pattern = re.compile(re.escape(key), re.IGNORECASE)
          myDict[value] = pattern
  
      return myDict
  
  def strrep(mystring, patternDict):
      for key in patternDict:
          regex_obj = patternDict[key]
          mystring = regex_obj.sub(key, mystring)
  
      return mystring
  </code></pre>