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

时间:2016-08-12 01:58:59

标签: python string find match

我想在"匹配对象"中找到一个字符串。在python中,但是" .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_list就像:

[<_sre.SRE_Match object; span=(0, 7), match='30M.aaa'>,  
 <_sre.SRE_Match object; span=(0, 7), match='40M.bbb'>,  
 <_sre.SRE_Match object; span=(0, 7), match='50M.aaa'>,  
 <_sre.SRE_Match object; span=(0, 7), match='50M.bbb'>,  
 <_sre.SRE_Match object; span=(0, 7), match='50M.ccc'>]

我希望得到结果:

'50M.aaa'  
'50M.bbb'

e_list[0].group(0)返回'30M.aaa'时,.find无法应用,因为它是匹配对象。然后,我该怎么办?

2 个答案:

答案 0 :(得分:2)

要检查字符串是否以'50M'开头,请使用str.startswith('50M')。这不会检测50M是后缀(test.50M)的情况。

if e_list[num_e].startswith('50M'):
    print(e_list[num_e])

如果后缀是查找50M的合法位置,则使用in.find('50M') > 0更清晰。

if '50M' in e_list[num_e]:

答案 1 :(得分:2)

我认为Python不是你的第一语言,你的代码就像Java一样。

请不要使用re.compile,因为这是不必要的。只需使用re.searchre.findall

在Python中,你可以使用:

result = re.findall('.*\.(aaa|bbb)$', file)

然后,result是一个列表,您可以打印它或使用for... loop来获取它的每个项目。

您也可以使用:

result = re.search('.*\.(aaa|bbb)$', file)

结果是一组。

然后你应该使用 result.group(1)来获得匹配的项目。

所以,你的代码可以是:

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)