Dividir por una palabra (mayúsculas y minúsculas)

Si quiero tomar

"hi, my name is foo bar" 

y divídalo en "foo" , y "foO" que esa división sea insensible a mayúsculas y minúsculas (dividida en cualquiera de "foO" , "FOO" , "Foo" , etc.), ¿qué debo hacer? Tenga en cuenta que aunque me gustaría que la división sea sensible a mayúsculas y minúsculas, también QUIERO mantener la sensibilidad a las mayúsculas del rest de la cadena.

Así que si tengo:

 test = "hi, my name is foo bar" print test.split('foo') print test.upper().split("FOO") 

Yo obtendría

 ['hi, my name is ', ' bar'] ['HI, MY NAME IS ', ' BAR'] 

respectivamente.

Pero lo que quiero es:

 ['hi, my name is ', ' bar'] 

cada vez. El objective es mantener la sensibilidad a las mayúsculas de la cadena original, excepto en lo que estoy dividiendo.

Así que si mi cadena de prueba era:

 "hI MY NAME iS FoO bar" 

Mi resultado deseado sería:

 ['hI MY NAME iS ', ' bar'] 

Puede usar la función re.split con el indicador re.IGNORECASE (o re.I para abreviar):

 >>> import re >>> test = "hI MY NAME iS FoO bar" >>> re.split("foo", test, flags=re.IGNORECASE) ['hI MY NAME iS ', ' bar'] >>> 

También puede buscar algo y obtener la posición inicial de la palabra clave. Lo recomendaría y lo cortaría con el método de “subcadena”. (Soy de C #, así que no sé cuál es el método en este idioma)