首页 > 解决方案 > 检查各种(不同)模式的字符串

问题描述

我有一个函数可以进行各种正则表达式匹配,以找出哪个快递属于提供的跟踪 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

解决方案


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

如您所见,我没有从文件或数据库中加载信使模式,但调整此解决方案很简单。


推荐阅读