Python 2.7 上数组中的正则表达式值元素



在 Python2.7 中。 我有一个包含以下对象的数组:

[{"TEMPLATE_NAME": "HP_LaserJet_P2055dn_USB_S29HDY6_HPLIP", 
"PRINTER_INFO": "HP LaserJet P2055dn", 
"PRINTER_LOCATION": "Локальный принтер", 
"DEVICE_URI": "hp:/usb/HP_LaserJet_P2055dn?serial=S29HDY6"}, 
{"TEMPLATE_NAME": "HP_LaserJet_P2055dn", 
"PRINTER_INFO": "HP LaserJet P2055dn", 
"PRINTER_LOCATION": "Локальный принтер", 
"DEVICE_URI": "usb://HP/LaserJet%20P2055dn?serial=S29HDY6"}]

参数和字符串的任何巧合都必须获得在数组中找到的第一个对象。现在它是这样完成的:

ArgInListFindNewPrinters = next(name for name in ListFindNewPrinters if ArgPrinter in [name['PRINTER_INFO'], name['DEVICE_URI'], name['TEMPLATE_NAME'], name['PRINTER_LOCATION']])
print ArgInListFindNewPrinters
>> {"TEMPLATE_NAME": "HP_LaserJet_P2055dn_49A71E", "PRINTER_INFO": "HP HP LaserJet P2055dn", "PRINTER_LOCATION": "Локальный принтер", "DEVICE_URI": "dnssd://HP%20LaserJet%20P2055dn%20%5B49A71E%5D._pdl-datastream._tcp.local/"}

此方法的缺点是它查找参数和字符串的完全匹配项,但我需要任何不区分大小写的条目。 示例:ArgPrinter = "LaserJe", ArgPrinter = "=S29HD"

主要问题是查找字符串中出现的任何子字符串。

========================================================================================我找到了一个解决方案,但它不是很实用,因为翻译成字符串需要更改编码:

ArgInListFindNewPrinters = next(name for name in ListFindNewPrinters if re.search(ArgPrinter, str(name), re.IGNORECASE))

如果有更优化的方法可以做到这一点,我将不胜感激。

将目标字符串和搜索字符串都转换为小写,以执行不区分大小写的搜索。

使用if x in string匹配子字符串。

可能有一种方法可以做得更好,但这有效:

ArgInListFindNewPrinters = next(name for name in ListFindNewPrinters
if ArgPrinter.lower() in name['PRINTER_INFO'].lower()
or ArgPrinter.lower() in name['DEVICE_URI'].lower()
or ArgPrinter.lower() in name['TEMPLATE_NAME'].lower()
or ArgPrinter.lower() in name['PRINTER_LOCATION'].lower())

最新更新