8

Как выполнить регистронезависимое сравнение строк?

1

Как сравнить строки без учета регистра в Python?

Я хотел бы реализовать сравнение обычных строк с некоторой строкой-репозиторием, используя простой и питоничный код. Также мне нужна возможность искать значения в словаре, где ключи являются строками, без учета регистра.

5 ответ(ов)

0

Как насчет того, чтобы сначала преобразовать строку в нижний регистр? Вы можете использовать string.lower().

0

Вы можете использовать метод casefold(). Метод casefold() игнорирует регистр при сравнении строк.

Вот пример:

firstString = "Hi EVERYONE"
secondString = "Hi everyone"

if firstString.casefold() == secondString.casefold():
    print('Строки равны.')
else:
    print('Строки не равны.')

Вывод:

Строки равны.
0

Обычный подход заключается в том, чтобы преобразовывать строки в верхний или нижний регистр для выполнения сравнений и поиска. Например:

>>> "hello".upper() == "HELLO".upper()
True
>>>
0

Вот чистое решение, которое я нашел, когда работал с некоторыми постоянными расширениями файлов:

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__, чтобы сравнения игнорировали регистр символов. Затем я использую этот класс для определения расширений файлов, а также проверяю, присутствуют ли они в списке суффиксов пути. Как показано в комментарии, результаты сравнения будут верными, учитывая регистронезависимый подход.

0

Вы можете использовать параметр case=False в методе str.contains(), чтобы игнорировать регистр при проверке наличия подстроки в строках столбца. Например:

data['Column_name'].str.contains('abcd', case=False)

Этот код будет проверять, содержится ли подстрока 'abcd' в строках столбца 'Column_name', независимо от того, в каком регистре написано слово (например, 'ABCD', 'abCd' и т.д.).

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь