Python 试图在忽略大小写以及某些0的字符串之间找到匹配项
有两个字符串列表,我正试图在它们之间找到匹配项。它们都包含具有不同格式的字符串,但它们指向相同的信息列表 一个列表包含格式为“A02A18”的字符串,而下一个列表可能包含与“a2a18”相同的字符串 还有一些字符串可能看起来像“A05”,与“a5”相配 我在标题中说“某些0”,因为如果我从字符串中去掉所有0,我不希望有“A15A20”和“a15a2”这样的字符串匹配(显然,因为05与5相同,但20与2不同) 我正在寻找一种方法,可以让他们相互匹配,如果找到 理想的情况是Python 试图在忽略大小写以及某些0的字符串之间找到匹配项,python,python-2.7,Python,Python 2.7,有两个字符串列表,我正试图在它们之间找到匹配项。它们都包含具有不同格式的字符串,但它们指向相同的信息列表 一个列表包含格式为“A02A18”的字符串,而下一个列表可能包含与“a2a18”相同的字符串 还有一些字符串可能看起来像“A05”,与“a5”相配 我在标题中说“某些0”,因为如果我从字符串中去掉所有0,我不希望有“A15A20”和“a15a2”这样的字符串匹配(显然,因为05与5相同,但20与2不同) 我正在寻找一种方法,可以让他们相互匹配,如果找到 理想的情况是 first = "A02
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。我最初在两边都画了一条0,以防将来一条线的“a05”取代了“a5”(只是试图覆盖所有的碱基)
虽然这种方法适用于这种情况,但它不适用于“A02A18”和“a2a18”之类的字符串。我将使用正则表达式删除字母后的零,并比较结果(大写的源可以在不使用大小写的情况下进行比较): 结果:
True
False
注意:这也适用于A000B12
:零刚刚被删除。但是,如果存在误报风险,因为输入可以是A00B1
和AB1
,那么convert函数可以创建字符串+转换整数的列表作为替代:
def convert(s):
return [int(x) if x.isdigit() else x.upper() for x in re.findall("[a-zA-Z]+|\d+",s)]
或者更简单的版本从一开始就将源代码大写(更短,可能更快,因为只有一个调用upper
)
假设您的意思是说除非最后一个字符是零,否则所有的零都应该被忽略,那么下面的代码应该能够执行该任务
def main(first, second):
first = first.lower()
second = second.lower()
string = ""
for i in range(0, (len(first)-1)):
if(first[i] != "0"):
string = string + first[i]
string = string + first[-1]
if(string == second):
return True
else:
return False
answer = main("A02A18", "a2a18")
print(answer)
answer = main("A15A20", "a15a2")
print(answer)
此代码对于第一次调用返回
True
,对于第二次调用返回False
。将来,请记住string.lower()
和string.upper()
函数。在这种情况下,它们非常有用 啊--那么您需要比较值,考虑到每个alpha字符串和每个整数?请适当标记此问题的来源。大约一小时前,另一个人发布了一个非常类似的版本。这并不是所有的案例都包含在内。尝试main(“A020A18”、“a20a18”)
。“假设你的意思是说除非最后一个字符是零,否则所有的零都应该被忽略”:你的起始假设是错误的
def convert(s):
return [int(x) if x.isdigit() else x for x in re.findall("[A-Z]+|\d+",s.upper())]
def main(first, second):
first = first.lower()
second = second.lower()
string = ""
for i in range(0, (len(first)-1)):
if(first[i] != "0"):
string = string + first[i]
string = string + first[-1]
if(string == second):
return True
else:
return False
answer = main("A02A18", "a2a18")
print(answer)
answer = main("A15A20", "a15a2")
print(answer)