Нечувствительный к строкам метод разделения строк 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

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

Вывод - abc

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

Вывод - abc Feat. def.

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

Вывод - abc

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

Ответ 1

a[0:a.lower().find("feat.")].rstrip().

and ИНГ

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

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

or ИНГ

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

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

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

Ответ 2

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

>>> 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*")

Ответ 3

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

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."