Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 试图在忽略大小写以及某些0的字符串之间找到匹配项_Python_Python 2.7 - Fatal编程技术网

Python 试图在忽略大小写以及某些0的字符串之间找到匹配项

Python 试图在忽略大小写以及某些0的字符串之间找到匹配项,python,python-2.7,Python,Python 2.7,有两个字符串列表,我正试图在它们之间找到匹配项。它们都包含具有不同格式的字符串,但它们指向相同的信息列表 一个列表包含格式为“A02A18”的字符串,而下一个列表可能包含与“a2a18”相同的字符串 还有一些字符串可能看起来像“A05”,与“a5”相配 我在标题中说“某些0”,因为如果我从字符串中去掉所有0,我不希望有“A15A20”和“a15a2”这样的字符串匹配(显然,因为05与5相同,但20与2不同) 我正在寻找一种方法,可以让他们相互匹配,如果找到 理想的情况是 first = "A02

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

一个列表包含格式为“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。我最初在两边都画了一条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)