Нечувствительный к строкам метод разделения строк Python

У меня 2 строки

a = "abc feat. def" b = "abc Feat. def" 

Я хочу получить строку перед словом feat. или Feat.

Это то, что я делаю,

 a.split("feat.", 1)[0].rstrip() 

Это возвращает abc . Но как я могу выполнить поиск без учета регистра с использованием разделителя разделителя?

Это то, что я пробовал до сих пор

 b.split("feat." or "Feat.", 1)[0].rstrip() 

Выход – abc Feat. def abc Feat. def

b.split("feat." and "Feat.", 1)[0].rstrip()

Выход – abc

a.split("feat." and "Feat.", 1)[0].rstrip()

Результат – abc feat. def abc feat. def .

a.split("feat." or "Feat.", 1)[0].rstrip()

Выход – abc

Почему это различие с and и / or в обоих случаях?

a[0:a.lower().find("feat.")].rstrip() будет делать.

and

"string1" and "string2" and ... and "stringN"

возвращает последнюю строку.

or

"string1" or "string2" or ... or "stringN"

вернет первую строку.

Оценка короткого замыкания .

Вместо этого используйте регулярное выражение:

 >>> import re >>> regex = re.compile(r"\s*feat\.\s*", flags=re.I) >>> regex.split("abc feat. def") ['abc', 'def'] >>> regex.split("abc Feat. def") ['abc', 'def'] 

или, если вы не хотите разрешать FEAT. или fEAT. (которое было бы в этом регулярном выражении):

 >>> regex = re.compile(r"\s*[Ff]eat\.\s*") 

Вы должны использовать регулярное выражение:

 re.split('\s*[Ff]eat\.', a) 

and or сделать какое-то логическое суждение.

 "feat." or "Feat." -> "feat." if "feat." else "Feat." -> "feat." "feat." and "Feat." -> "Feat." if "feat." else "feat." -> "Feat." . "feat." or "Feat." -> "feat." if "feat." else "Feat." -> "feat." "feat." and "Feat." -> "Feat." if "feat." else "feat." -> "Feat."