但对忽略的情况没有成功。我需要在一个给定的文本文件中找到一组词。我正在逐行阅读该文件。一行中的字可以是 曼蒂 , 敏迪 , 梦迪 ,等等(我不想用 toupper / tolower 等)。

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

if ($line=~/^Mandy Pande:/i)
    
python
perl
Mandar Pande
Mandar Pande
发布于 2011-07-05
10 个回答
eumiro
eumiro
发布于 2021-03-28
已采纳
0 人赞同

如果你不想使用str.lower(),你可以使用一个正则表达式:

import re
if re.search('mandy', 'Mandy Pande', re.IGNORECASE):
    # Is True
    
Miro
re.search(pattern, string, flags=0)docs.python.org/3/library/re.html#re.search扫描字符串,寻找正则表达式模式产生匹配的第一个位置,并返回一个相应的匹配对象。如果字符串中没有任何位置与模式匹配,则返回None;注意,这与在字符串的某个位置找到零长度的匹配不同。
对特殊字符要小心。它们会给这个方法带来问题
Samuele Mattiuzzo
Samuele Mattiuzzo
发布于 2021-03-28
0 人赞同

还有一个帖子here.试着看一下这个。

BTW, you're looking for the .lower() method:

string1 = "hi"
string2 = "HI"
if string1.lower() == string2.lower():
    print "Equals!"
else:
    print "Different!"
    
不,他不是。"[我不想使用toupper/tolower等]"
我知道,我读过,但是re.match和re.search解决方案没有检查regex中使用的特殊字符,如()或[] 。
与该问题有什么关系?
这不是一个更普遍的答案,因为tolower/toupper方案不适合Unicode。
如果你不是真的需要避免它(由于某些原因,如unicode),用lower()处理可以比regex匹配更有效率。
Unmitigated
Unmitigated
发布于 2021-03-28
0 人赞同

人们可以在应用in算子后使用str.casefold to both strings.

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

Return a casefolded copy of the string. Casefolded strings may be used for caseless matching.

大小写类似于小写,但更有侵略性,因为它的目的是去除一个字符串中的所有大小写区别。例如,德语小写字母'ß'相当于 "ss"。由于它已经是小写字母,lower()不会对'ß'做任何处理;casefold()将其转换为 "ss"。

大小写折叠算法在Unicode标准的3.13节中有描述。

New in version 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')
    
norbertoisaac
norbertoisaac
发布于 2021-03-28
0 人赞同
if haystackstr.lower().find(needlestr.lower()) != -1:
  # True
    
Riccardo B.
Riccardo B.
发布于 2021-03-28
0 人赞同
a = "MandY"
alow = a.lower()
if "mandy" in alow:
    print "true"
    
pabloverd
pabloverd
发布于 2021-03-28
0 人赞同

你也可以使用。s.lower() in str.lower()

OP说"我不想使用toupper/tolower,等等。"
VHS
VHS
发布于 2021-03-28
0 人赞同

你可以将in操作符与字符串的lower方法结合使用。

if "mandy" in line.lower():

a'r
a'r
发布于 2021-03-28
0 人赞同
import re
if re.search('(?i)Mandy Pande:', line):
    
如果我没有猜错的话,这并不检查/匹配像[]或()这样的regexp中的控制字符...。
Fredrik Pihl
Fredrik Pihl
发布于 2021-03-28
0 人赞同

See this.

In [14]: re.match("mandy", "MaNdY", re.IGNORECASE)
Out[14]: <_sre.SRE_Match object at 0x23a08b8>
    
mpriya
mpriya
发布于 2021-03-28
0 人赞同

如果是大熊猫系列,你可以提到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: