Python字符串比较

Python字符串比较,python,regex,Python,Regex,我想比较这两个字符串是否匹配 让我们说: >>> s1 = "I am s1 H1" >>> s2 = "IAmS1 H1" >>> >>> if s1 == s2: ... print "s1 and s2 are equal" ... else: ... print "s1 and s2 not equal" ... I am getting OUTPUT: s1 and s2 not equal

我想比较这两个字符串是否匹配

让我们说:

>>> s1 = "I am s1 H1"
>>> s2 = "IAmS1 H1"
>>> 
>>> if s1 == s2:
...     print "s1 and s2 are equal"
... else:
...     print "s1 and s2 not equal"
... 
I am getting OUTPUT: s1 and s2 not equal

My expected OUTPUT : s1 and s2 are equal
我尝试删除空格,并将字符串保持为小写。这是可行的,但我相信,这不是一个好的解决办法


我的意图是两个字符串char应该相互匹配,而不考虑空格和大小写


唯一的解决方案是正则表达式?还是其他解决方案?请发表你的想法和观点。这将是非常可观的

你没有解释你对“比赛”的期望,但从你的例子来看,我想说你可以简单地做到:

if s1.lower().replace(" ","") == s2.lower().replace(" ",""):
它将有效地忽略空格和大小写。如果这不是你想要的,请改进你的问题

如果您对删除所有空白感兴趣,则可以使用以下方法:

if "".join(s1.lower().split()) == "".join(s2.lower().split()):

因此,您似乎希望忽略空白以及字符是大写还是小写

如果是这种情况,您可以使用以下内容:

s1 = "I am s1 H1"
s2 = "IAmS1 H1"
if s1.replace(" ","").lower() == s2.replace(" ","").lower():
    print("equal")
尽管如此,考虑到如果你在代码中添加大量这样的语句,代码会看起来有多难看,你可能希望将其重构为一个函数:

def strEqualSpecial(p1,p2):
    return p1.replace(" ","").lower() == p2.replace(" ","").lower()

s1 = "I am s1 H1"
s2 = "IAmS1 H1"
if strEqualSpecial(s1,s2):
    print("equal")
然后将“丑陋”限制在代码的一小部分,剩下的部分相对干净。如果您以后决定更改规则,例如忽略所有空格而不仅仅是空格,这也会使事情变得更容易:

import re
def strEqualSpecial(p1,p2):
    return re.sub("\s+","",p1.lower()) == re.sub("\s+","",p2.lower())

如果你真的想使用正则表达式,那么你可以尝试下面的方法

>>> s1 = "I am s1 H1"
>>> s2 = "IAmS1 H1"
>>> if re.match(r'(?i)'+re.sub(r'\s', '', s1)+r'$', re.sub(r'\s', '', s2)):
        print('Equal')


Equal

\s
匹配任何类型的空白。您也可以使用
[\t]
而不是
\s
<代码>(?i)不区分大小写的修饰符。由于
re.match
尝试从字符串的开头进行匹配,因此不需要包括行锚的开头
^
,并且必须包括行锚的结尾
$

您的输出是correct@Michael嘿,如果s1字符串与s2具有相同的len和不同的字符,该怎么办?我的目的是两个字符串char应该相互匹配,而不管空格和大小写,这是唯一的方法。当然,如果在不同的地方调用测试,可以在函数中提取该测试。这里没有必要也没有理由使用正则表达式。@vermillon:但如果s1=“我在这里”,s2=“我在这里”我确实需要醒来,那么您的代码就不起作用了。。。更正。但是,正则表达式模块有一个标记re.IGNORECASE或re.I,这将使其比(?I)更可读。但是,如果s1=“我在这里”,s2=“iaMHerE”@vamsi,您的代码不起作用。我想您应该坚持非re方法。如果字符串类似于
s1=“I\Am s1 H1”s2=“I\AmS1 H1”,则此方法不起作用
@vks两者都不起作用,因为
\a
原始模式下将变为
\x07
@AvinashRaj。