我有一个包含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结合使用,但我无法实现。多谢您的协助,如果造成混淆,敬请见谅。
答案 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)-
。