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

Man*_*nde 55 python perl

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

if line.find('mandy') >= 0:
Run Code Online (Sandbox Code Playgroud)

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

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

if ($line=~/^Mandy Pande:/i)
Run Code Online (Sandbox Code Playgroud)

eum*_*iro 96

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

import re

if re.search('mandy', 'Mandy Pande', re.IGNORECASE):
    # Is True
Run Code Online (Sandbox Code Playgroud)

  • re.search(pattern, string, flags=0) https://docs.python.org/3/library/re.html#re.search 扫描字符串,查找正则表达式模式产生匹配的第一个位置,并返回对应的匹配对象。如果字符串中没有位置与模式匹配,则返回 None;请注意,这与在字符串中的某个点查找零长度匹配不同。 (2认同)

hev*_*ev1 28

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

\n

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

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

大小写折叠类似于小写,但更激进,因为它旨在消除字符串中的所有大小写区别。例如,德语小写字母\'\xc3\x9f\'相当于“ss”。因为它已经是小写了,所以 lower() 对 \'\xc3\x9f\' 不会执行任何操作;casefold() 将其转换为“ss”。

\n

Unicode 标准第 3.13 节描述了 casefolding 算法。

\n

3.3 版本中的新功能。

\n

对于不区分大小写的子字符串搜索:

\n
needle = "TEST"\nhaystack = "testing"\nif needle.casefold() in haystack.casefold():\n    print(\'Found needle in haystack\')\n
Run Code Online (Sandbox Code Playgroud)\n

对于不区分大小写的字符串比较:

\n
a = "test"\nb = "TEST"\nif a.casefold() == b.casefold():\n    print(\'a and b are equal, ignoring case\')\n
Run Code Online (Sandbox Code Playgroud)\n


Sam*_*zzo 14

还有另一篇文章在这里.试着看看这个.

顺便说一下,你正在寻找这种.lower()方法:

string1 = "hi"
string2 = "HI"
if string1.lower() == string2.lower():
    print "Equals!"
else:
    print "Different!"
Run Code Online (Sandbox Code Playgroud)

  • 不,他不是."[我不想使用toupper/tolower等]" (4认同)
  • () 或 [] 与这个问题有什么关系? (2认同)
  • 如果您真的不需要避免这种情况(由于某些原因,例如unicode),则使用lower()进行缓存比使用正则表达式匹配要有效得多。 (2认同)

小智 6

尝试:

if haystackstr.lower().find(needlestr.lower()) != -1:
  # True
Run Code Online (Sandbox Code Playgroud)


Ric*_*rdo 5

a = "MandY"
alow = a.lower()
if "mandy" in alow:
    print "true"
Run Code Online (Sandbox Code Playgroud)

解决