Как сопоставить подстроку в случае игнорирования строки?
Я ищу игнорировать сравнения строк в 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"
обойти
Вы можете использовать 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.