如何匹配字符串中的子字符串忽略大小写?

时间:2011-07-05 08:33:31

标签: python perl

我正在寻找Python中的忽略大小写字符串比较。 我尝试过:

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

但忽略案例没有成功。我需要在给定的文本文件中找到一组单词。我正在逐行阅读文件。一行上的Word可以是 mandy Mandy MANDY 等(我不想使用toupper / { {1}}等。)。

我正在寻找下面的Perl代码的Python等价物。

tolower

10 个答案:

答案 0 :(得分:82)

如果您不想使用str.lower(),可以使用regexp:

import re

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

答案 1 :(得分:12)

还有另一篇帖子here。试着看看这个。

BTW,您正在寻找.lower()方法:

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

答案 2 :(得分:4)

a = "MandY"
alow = a.lower()
if "mandy" in alow:
    print "true"

解决

答案 3 :(得分:2)

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

答案 4 :(得分:2)

请参阅this

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

答案 5 :(得分:1)

尝试:

if haystackstr.lower().find(needlestr.lower()) != -1:
  # True

答案 6 :(得分:1)

您还可以使用:s.lower() in str.lower()

答案 7 :(得分:1)

如果是pandas系列,可以在str.contains中提及case=False

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.

答案 8 :(得分:0)

您可以将in运算符与lower字符串方法结合使用。

if "mandy" in line.lower():

答案 9 :(得分:0)

可以在将 str.casefold 应用于两个字符串后使用 in 运算符。

str.casefold 是不区分大小写比较时推荐使用的方法。

返回字符串的大小写副本。大小写折叠字符串可用于无大小写匹配。

Casefolding 类似于小写,但更具侵略性,因为它旨在消除字符串中的所有大小写区别。例如,德语小写字母“ß”相当于“ss”。由于它已经是小写的,lower() 对 'ß' 没有任何作用; casefold() 将其转换为“ss”。

大小写算法在 Unicode 标准的第 3.13 节中描述。​​

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')
相关问题