Как сопоставить подстроку в случае игнорирования строки?

Я ищу игнорировать сравнения строк в Python. Я пробовал с:

if line.find('mandy') >= 0:

но безуспешно для игнорирования дела. Мне нужно найти набор слов в данном текстовом файле. Я читаю файл построчно. Слово в строке может быть Мэнди, Мэнди, Мэнди и т. Д. (Я не хочу использовать toupper/tolower, так далее.).

Я ищу Python-эквивалент кода Perl ниже.

if($line=~/^Mandy Pande:/i)

10 ответов

Решение

Если вы не хотите использовать str.lower()Вы можете использовать регулярное выражение:

import re

if re.search('mandy', 'Mandy Pande', re.IGNORECASE):
    # is True

Здесь есть еще один пост. Попробуйте посмотреть на это.

Кстати, вы ищете .lower() метод:

string1 = "hi"
string2 = "HI"
if string1.lower() == string2.lower():
    print "Equals!"
else:
    print "Different!"

Можно использовать inоператор после подачи заявкина обе струны.

str.casefoldрекомендуемый метод для сравнения без учета регистра.

Возвращает свернутую копию строки. Строки с регистром могут использоваться для безрегистрового сопоставления.

Сворачивание регистра похоже на преобразование в нижний регистр, но более агрессивно, поскольку оно предназначено для удаления всех регистровых различий в строке. Например, немецкая строчная буква «ß» эквивалентна «ss». Поскольку это уже нижний регистр, функция lower() ничего не сделает с 'ß'; casefold() преобразует его в "ss".

Алгоритм сворачивания регистров описан в разделе 3.13 стандарта Unicode.

Новое в версии 3.3.

Для поиска подстроки без учета регистра:

      needle = "TEST"
haystack = "testing"
if needle.casefold() in haystack.casefold():
    print('Found needle in haystack')

Для сравнения строк без учета регистра:

      a = "test"
b = "TEST"
if a.casefold() == b.casefold():
    print('a and b are equal, ignoring case')

Пытаться:

if haystackstr.lower().find(needlestr.lower()) != -1:
  # True
a = "MandY"
alow = a.lower()
if "mandy" in alow:
    print "true"

обойти

Вы также можете использовать: s.lower() in str.lower()

import re
if re.search('(?i)Mandy Pande:', line):
    ...

Вы можете использовать in оператор в сочетании с lower метод струн.

if "mandy" in line.lower():

Смотрите это.

In [14]: re.match("mandy", "MaNdY", re.IGNORECASE)
Out[14]: <_sre.SRE_Match object at 0x23a08b8>

Если это серия панд, вы можете указать case=False в строке str.contains.

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

ИЛИ, если это всего два сравнения строк, попробуйте другой метод ниже

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

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

if firstString.casefold() == secondString.casefold():
    print('The strings are equal.')
else:
    print('The strings are not equal.')

Выход:

      The strings are equal.
Другие вопросы по тегам