搜索数字是否在作为路径的字符串中

时间:2018-12-06 14:15:25

标签: python regex

我有一个包含ID号的列表,如下所示:

cedulas = [344823, 1234567, 12534, 16537]

我有一个列表,其中列出了所有搜索图像的路径,如下所示:

img_path = [
'/home/diego/Escritorio/LIGD/Secundary/344823-20180730@091239-L13_0_31_626-S.jpg',
 '/home/diego/Escritorio/LIGD/Secundary/34482328-20180730@091239-L13_0_31_626-S.jpg'  ]

这是我的代码:

    for cedula in cedulas:
    for path in im_path:
        if cedula in path:
            print 'Se encontro la imagen {} que corresponde a la cedula {}'.format(path, cedula])

问题在于代码找到了序列而不是确切的数字。 例如:

如果ID == 344823(输出上方的代码是[True, True])。

但是我想找到数字的完全匹配。因此输出应为:[True, False]

我知道它可以与re结合使用,但我无法实现。多谢您的协助,如果造成混淆,敬请见谅。

4 个答案:

答案 0 :(得分:3)

我认为这是你的愿望。它仅与list中的精确数字匹配。此外,如果每个数字的字符长度由len(num)Ω( len(num) * n^2 )确定,则其复杂度至少是。我认为应该为您的目的提供更好的设计。

import re


list = [344823, 1234567, 12534, 16537]

list_img = [
'/home/diego/Escritorio/LIGD/Secundary/344823-20180730@091239-L13_0_31_626-S.jpg',
 '/home/diego/Escritorio/LIGD/Secundary/34482328-20180730@091239-L13_0_31_626-S.jpg'  ]


for number in list:
    for path in list_img:
        token = str(number)
        if re.search(r'\b' + token + r'\b', path):
            print(path)

答案 1 :(得分:1)

不要调用list列表:

ids = [344823, 1234567, 12534, 16537]
paths = ['/home/diego/Escritorio/LIGD/Secundary/344823-20180730@091239-L13_0_31_626-S.jpg', '/home/diego/Escritorio/LIGD/Secundary/34482328-20180730@091239-L13_0_31_626-S.jpg'  ]

result_set = {}

for id in ids:
    result_set[id] = [len(re.findall('\D%s\D'%str(id), mypath))>0 for mypath in paths]

会给{344823: [True, False]...}

答案 2 :(得分:0)

您可以尝试这样的正则表达式模式:

YOUR_NUMBER = 344823
pattern = '\D(YOUR_NUMBER)\D'

答案 3 :(得分:0)

您可以基于id构建正则表达式并进行搜索:

import re
l = [344823, 1234567, 12534, 16537]
img_path = [
 '/home/diego/Escritorio/LIGD/Secundary/344823-20180730@091239-L13_0_31_626-S.jpg',
 '/home/diego/Escritorio/LIGD/Secundary/34482328-20180730@091239-L13_0_31_626-S.jpg'  ]
r = "(" + '|'.join(map(lambda x : str(x),list)) + ")-"
# => '(344823|1234567|12534|16537)-'
filter(lambda p: re.search(r, p) , img_path)
# ['/home/diego/Escritorio/LIGD/Secundary/344823-20180730@091239-L13_0_31_626-S.jpg']

Regex查找列出的任何数字后跟-,例如(12|16)-