在python中的匹配对象中查找字符串

在python中的匹配对象中查找字符串,python,string,find,match,Python,String,Find,Match,我想在python中的match对象中查找字符串,但是.find不起作用。以下是我的片段: e_list = [] for file in os.listdir('.'): r = re.compile(r".*\.(aaa|bbb)$") e_found = r.search(file) if e_found is not None: e_list.append(e_found.group(0)) e_length = len(e_list); fo

我想在python中的match对象中查找字符串,但是.find不起作用。以下是我的片段:

e_list = []
for file in os.listdir('.'):
    r = re.compile(r".*\.(aaa|bbb)$")
    e_found = r.search(file)
    if e_found is not None:
        e_list.append(e_found.group(0))

e_length = len(e_list);

for num_e in range(e_length):
    if(e_list[num_e].group(0).find('50M') > 0)
        print(e_list[num_e].group(0))
。。。现在e_列表如下所示:


当e_列表[0].group0返回“30M.aaa”时,无法应用.find,因为它是匹配对象。那么,我该怎么办呢?

要检查字符串是否以“50M”开头,请使用str.startswith“50M”。这不会检测50M为后缀测试的情况。50M

如果后缀是查找50M的合法位置,那么使用in比.find'50M'>0更简洁


要检查字符串是否以“50M”开头,请使用str.startswith“50M”。这不会检测50M为后缀测试的情况。50M

如果后缀是查找50M的合法位置,那么使用in比.find'50M'>0更简洁


我认为Python不是你的第一语言,你的代码闻起来像Java

请不要使用re.compile,因为它是不必要的。只需使用re.search或re.findall

在Python中,您只需使用:

result = re.findall('.*\.(aaa|bbb)$', file)
然后,结果是一个列表,您可以打印它或用于。。。循环以获取其中的每一项

您也可以使用:

result = re.search('.*\.(aaa|bbb)$', file)
结果是一组

然后,您应该使用result.group1获取匹配项的结果

因此,您的代码可以是:

e_list = []
for file in os.listdir('.'):
    e_found = re.search(".*\.(aaa|bbb)$", file)

    if e_found:
        e_list.append(e_found.group(1))


for item in e_list:
    if item.find('50M') > 0
        print(item)

我认为Python不是你的第一语言,你的代码闻起来像Java

请不要使用re.compile,因为它是不必要的。只需使用re.search或re.findall

在Python中,您只需使用:

result = re.findall('.*\.(aaa|bbb)$', file)
然后,结果是一个列表,您可以打印它或用于。。。循环以获取其中的每一项

您也可以使用:

result = re.search('.*\.(aaa|bbb)$', file)
结果是一组

然后,您应该使用result.group1获取匹配项的结果

因此,您的代码可以是:

e_list = []
for file in os.listdir('.'):
    e_found = re.search(".*\.(aaa|bbb)$", file)

    if e_found:
        e_list.append(e_found.group(1))


for item in e_list:
    if item.find('50M') > 0
        print(item)

进一步阅读:Python3。您应该将其用于正则表达式,以防止反斜杠和字符串与regex元字符的奇怪交互:r.*\.aaa | bbb$。尽管这个正则表达式不需要它,但现在就开始养成这个习惯会让你以后不会头疼。对@Kevin J.Chase来说:哦,我以为我已经在正则表达式前面加了一个“r”,但它不见了。感谢您提醒我。为了进一步阅读:Python 3。您应该将其用于正则表达式,以防止与反斜杠和字符串与regex元字符的奇怪交互:r.*\.aaa | bbb$。尽管这个正则表达式不需要它,但现在就开始养成这个习惯会让你以后不会头疼。对@Kevin J.Chase来说:哦,我以为我已经在正则表达式前面加了一个“r”,但它不见了。谢谢你提醒我,没用。读了Kingname的答案后,我注意到最后一部分应该是:ife_list[num_e].find'50M'>0:printe_list[num_e]@IanHacker啊,我明白了。我已经更新了我的答案,使之正确-我所描述的方法将比.find.It更清晰、更具体。读了Kingname的答案后,我注意到最后一部分应该是:ife_list[num_e].find'50M'>0:printe_list[num_e]@IanHacker啊,我明白了。我已经更新了我的答案,使之正确-我描述的方法将比你的答案更清晰、更具体。实际上,e_list.appende_found.group0提供了我想要的整个文件名。除此之外,我完全复制了你的,而且效果很好。也感谢您纠正我的迭代。由您的答案解决。实际上,e_list.appende_found.group0提供了我想要的整个文件名。除此之外,我完全复制了你的,而且效果很好。还感谢您纠正我的迭代。
e_list = []
for file in os.listdir('.'):
    e_found = re.search(".*\.(aaa|bbb)$", file)

    if e_found:
        e_list.append(e_found.group(1))


for item in e_list:
    if item.find('50M') > 0
        print(item)