How to match a substring in a string, ignoring case
I'm looking for ignore case string comparison in Python.
I tried with:
if line.find('mandy') >= 0:
but no success for ignore case. I need to find a set of words in a given text file. I am reading the file line by line. The word on a line can be mandy, Mandy, MANDY, etc. (I don't want to use toupper
/tolower
, etc.).
I'm looking for the Python equivalent of the Perl code 开发者_JAVA百科below.
if ($line=~/^Mandy Pande:/i)
If you don't want to use str.lower()
, you can use a regular expression:
import re
if re.search('mandy', 'Mandy Pande', re.IGNORECASE):
# Is True
There's another post here. Try looking at this.
BTW, you're looking for the .lower()
method:
string1 = "hi"
string2 = "HI"
if string1.lower() == string2.lower():
print "Equals!"
else:
print "Different!"
One can use the in
operator after applying str.casefold
to both strings.
str.casefold
is the recommended method for use in case-insensitive comparison.
Return a casefolded copy of the string. Casefolded strings may be used for caseless matching.Casefolding is similar to lowercasing but more aggressive because it is intended to remove all case distinctions in a string. For example, the German lowercase letter 'ß' is equivalent to "ss". Since it is already lowercase, lower() would do nothing to 'ß'; casefold() converts it to "ss".
The casefolding algorithm is described in section 3.13 of the Unicode Standard.
New in version 3.3.
For case-insensitive substring search:
needle = "TEST"
haystack = "testing"
if needle.casefold() in haystack.casefold():
print('Found needle in haystack')
For case-insensitive string comparison:
a = "test"
b = "TEST"
if a.casefold() == b.casefold():
print('a and b are equal, ignoring case')
Try:
if haystackstr.lower().find(needlestr.lower()) != -1:
# True
a = "MandY"
alow = a.lower()
if "mandy" in alow:
print "true"
work around
you can also use: s.lower() in str.lower()
You can use in
operator in conjunction with lower
method of strings.
if "mandy" in line.lower():
import re
if re.search('(?i)Mandy Pande:', line):
...
See this.
In [14]: re.match("mandy", "MaNdY", re.IGNORECASE)
Out[14]: <_sre.SRE_Match object at 0x23a08b8>
If it is a pandas series, you can mention case=False in the str.contains
data['Column_name'].str.contains('abcd', case=False)
OR if it is just two string comparisons try the other method below
You can use casefold() method. The casefold() method ignores cases when comparing.
firstString = "Hi EVERYONE"
secondString = "Hi everyone"
if firstString.casefold() == secondString.casefold():
print('The strings are equal.')
else:
print('The strings are not equal.')
Output:
The strings are equal.
精彩评论