Как выполнить регистронезависимое сравнение строк?
Как сравнить строки без учета регистра в Python?
Я хотел бы реализовать сравнение обычных строк с некоторой строкой-репозиторием, используя простой и питоничный код. Также мне нужна возможность искать значения в словаре, где ключи являются строками, без учета регистра.
5 ответ(ов)
Как насчет того, чтобы сначала преобразовать строку в нижний регистр? Вы можете использовать string.lower()
.
Вы можете использовать метод casefold()
. Метод casefold()
игнорирует регистр при сравнении строк.
Вот пример:
firstString = "Hi EVERYONE"
secondString = "Hi everyone"
if firstString.casefold() == secondString.casefold():
print('Строки равны.')
else:
print('Строки не равны.')
Вывод:
Строки равны.
Обычный подход заключается в том, чтобы преобразовывать строки в верхний или нижний регистр для выполнения сравнений и поиска. Например:
>>> "hello".upper() == "HELLO".upper()
True
>>>
Вот чистое решение, которое я нашел, когда работал с некоторыми постоянными расширениями файлов:
from pathlib import Path
class CaseInsensitiveString(str):
def __eq__(self, __o: str) -> bool:
return self.casefold() == __o.casefold()
GZ = CaseInsensitiveString(".gz")
ZIP = CaseInsensitiveString(".zip")
TAR = CaseInsensitiveString(".tar")
path = Path("/tmp/ALL_CAPS.TAR.GZ")
result = (
GZ in path.suffixes,
ZIP in path.suffixes,
TAR in path.suffixes,
TAR == ".tAr"
)
# (True, False, True, True)
В этом коде я создаю класс CaseInsensitiveString
, который переопределяет метод __eq__
, чтобы сравнения игнорировали регистр символов. Затем я использую этот класс для определения расширений файлов, а также проверяю, присутствуют ли они в списке суффиксов пути. Как показано в комментарии, результаты сравнения будут верными, учитывая регистронезависимый подход.
Вы можете использовать параметр case=False в методе str.contains(), чтобы игнорировать регистр при проверке наличия подстроки в строках столбца. Например:
data['Column_name'].str.contains('abcd', case=False)
Этот код будет проверять, содержится ли подстрока 'abcd' в строках столбца 'Column_name', независимо от того, в каком регистре написано слово (например, 'ABCD', 'abCd' и т.д.).
Почему сравнение строк с помощью '==' и 'is' иногда дает разные результаты?
Как протестировать несколько переменных на равенство одному значению?
Как изменить порядок столбцов в DataFrame?
Получение текущей даты в формате YYYY-MM-DD в Python
Использование @property против геттеров и сеттеров