我有一个函数,它将执行各种正则表达式匹配,以找出哪个信使属于所提供的tracking id。
现在,我正在使用许多elif
语句,这些语句工作得很好,但我感觉这在维护方面并不是很容易扩展。
import re
def get_courier(tracking_id):
""" Retrieves the courier from a given tracking-id """
if re.match(r'^ABC\d*$', f'{tracking_id}'):
courier = "Courier 1"
elif re.match(r'^\d*-\d$', f'{tracking_id}'):
courier = "Courier 2"
elif re.match(r'^PREF\d*$', f'{tracking_id}'):
courier = "Courier 3"
# ...
else:
courier = None
return courier
是否有可能将模式“外包”到一个文件或数据库中,我可以在其中定义模式及其相关信使?
我想不出一个像这样的解决方案。
import re
def get_courier(tracking_id):
""" Retrieves the courier from a given tracking-id """
patterns = database_select_function()
courier = re.match(patterns, tracking_id)
return courier
发布于 2021-01-08 11:37:09
下面是python中的regex模式匹配的一个简单的更好的解决方案:
import re
courier_patterns={r'^ABC\d*$': 'Courier 1',
r'^\d*-\d$': 'Courier 2',
r'^PREF\d*$': 'Courier 3'}
def get_courier(tracking_id):
""" Retrieves the courier from a given tracking-id """
courier=None
for pattern, courier_name in courier_patterns.items():
if re.match(pattern):
courier=courier_name
break
return courier
正如您所看到的,我并不是从文件或DB加载快递模式,但是适应这个解决方案很简单。
https://stackoverflow.com/questions/65628089
复制相似问题