gpt4 book ai didi

python - 试图在忽略大小写和某些 0 的字符串之间找到匹配项

转载 作者:太空宇宙 更新时间:2023-11-04 04:40:07 29 4
gpt4 key购买 nike

我试图在两个字符串列表之间找到匹配项。它们都包含格式不同的字符串,但它们指向相同的信息列表。

一个列表包含格式为“A02A18”的字符串,而下一个列表可能具有与“a2a18”相同的字符串

还有一些字符串可能看起来像“A05”,可以与“a5”一起使用

我在标题中说“某些 0”是因为如果我从字符串中去除所有 0,我不希望有诸如“A15A20”和“a15a2”之类的字符串匹配(显然是因为 05 与 5 相同但 20 与 2) 不同

我正在寻找一种方法,如果找到的话,可以让它们相互匹配。

理想情况下应该是这样的

first = "A02A18"
second = "a2a18"

if first == second:
print "Yes"

我有什么-

最初我有一个语句可以匹配像“A05”和“a5”这样的字符串这看起来像

first = "A05"
second = "a5"

if first[1:].lstrip("0") == second[1:].lstrip("0"):
print "yeah"

这将获取两个字符串并在第一个索引之后比较它们,因此在前面的示例“A05”的情况下,a5 将在第一个字母之后进行比较以忽略大小写。然后 lstrip "0"将去除那里的 0。我最初在两边都做了一个 strip 0,以防将来字符串有“a05”而不是“a5”(只是试图覆盖所有基地)

虽然这适用于这种情况,但不适用于诸如“A02A18”和“a2a18”之类的字符串

最佳答案

我会使用正则表达式删除字母后面的零,然后比较结果(将源大写以便能够在不使用大小写的情况下进行比较):

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"))

结果:

True
False

注意:这也适用于 A000B12:零刚刚被删除。但是,如果因为输入可以是 A00B1AB1 而存在误报风险,则转换函数可以创建一个字符串列表 + 转换后的整数作为替代:

def convert(s):
return [int(x) if x.isdigit() else x.upper() for x in re.findall("[a-zA-Z]+|\d+",s)]

或者一个更简单的版本,从一开始就将源代码大写(更短,可能稍微快一些,因为只有一次调用 upper)

def convert(s):
return [int(x) if x.isdigit() else x for x in re.findall("[A-Z]+|\d+",s.upper())]

关于python - 试图在忽略大小写和某些 0 的字符串之间找到匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50845431/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com