python - 检查各种(不同)模式的字符串
问题描述
我有一个函数可以进行各种正则表达式匹配,以找出哪个快递属于提供的跟踪 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
解决方案
python中正则表达式模式匹配的一个简单更好的解决方案如下:
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
如您所见,我没有从文件或数据库中加载信使模式,但调整此解决方案很简单。
推荐阅读
- kubernetes - 使用 log4j 在自由控制台中记录消息
- python - 在 Python 3 中使用 GooglePlaces 获取地点详细信息(特别是评论)
- mysql - 在MySql中使用if条件时如何应用案例
- asp.net - 如果它是从 ajax 响应填充的,如何在我的 asp:Gridview 的每一行上添加一个复选框
- sql - 比较 BigQuery 中的两个 ID/字符串
- python - 我在哪里可以部署一个在后面使用 selenium 的 Flask 应用程序?
- php - 单独页面上的php变量不起作用
- javascript - Javascript - 当我们点击 div 时添加和删除类
- windows - 无法在 Jenkins slave 上执行 windows bash 脚本
- java - 正则表达式获取值