擅长:python、mysql、java
<p>我将使用正则表达式删除字母后面的零,并比较结果(大写源代码,以便能够在不使用大写的情况下进行比较):</p>
<pre><code>import re
def compare(s1,s2):
def convert(s):
return re.sub("([A-Z])0+",r"\1",s.upper())
return convert(s1) == convert(s2)
print(compare("A02A18","a2a18"))
print(compare("A20A18","a2a18"))
</code></pre>
<p>结果:</p>
<pre><code>True
False
</code></pre>
<p>注意:这也适用于<code>A000B12</code>:零刚刚被删除。但是,如果存在误报风险,因为输入可以是<code>A00B1</code>和<code>AB1</code>,那么convert函数可以创建字符串+转换整数的列表作为替代:</p>
<pre><code>def convert(s):
return [int(x) if x.isdigit() else x.upper() for x in re.findall("[a-zA-Z]+|\d+",s)]
</code></pre>
<p>或者更简单的版本从一开始就将源代码大写(更短,可能更快,因为只有一个对<code>upper</code>的调用)</p>
<pre><code>def convert(s):
return [int(x) if x.isdigit() else x for x in re.findall("[A-Z]+|\d+",s.upper())]
</code></pre>