我想比较两个字符串是否匹配。
让我们说:
>>> 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
我尝试删除空格并将字符串保持为小写。它有效,但我相信,它不是一个好的解决方案
我的意图是2个字符串char应该相互匹配,无论是否有空格和大写或小写
只有解决方案是正则表达式吗?或任何其他解决方案?请发表您的想法和观点。这真是可以理解
答案 0 :(得分:6)
你还没有解释你对#34;匹配"的看法,但从你的例子来看,我会说你可以这样做:
if s1.lower().replace(" ","") == s2.lower().replace(" ",""):
它将有效地忽略空格和大小写。如果它不是您要找的,请改进您的问题。
如果你对删除所有空格感兴趣,那么你可以改用它:
if "".join(s1.lower().split()) == "".join(s2.lower().split()):
答案 1 :(得分:1)
所以看起来你想要忽略空格以及字符是大写还是小写。
如果是这种情况,你会使用类似的东西:
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())
答案 2 :(得分:1)
如果您真的想使用正则表达式,那么您可以尝试下面的内容。
>>> 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
尝试从字符串的开头匹配,因此您不需要包含行锚^
的开头,并且必须包含行锚$
的结尾。< / p>