python - 使用掩码和正则表达式从数组中获取数字

标签 python regex python-re

此数组包含 codecollection,其中 X 是可以是“任意数字”的掩码:

input_array = [{"code": "XXXX10", "collection": "one"}, {"code": "XXX610", "collection": "two"}, {"code": "XXXX20", "collection": "three"}]   

我想要一个给出任何 6 位代码的函数,例如 000710 返回与最佳代码掩码匹配的值(例如为 one )。这是我的尝试:

def get_collection_from_code(analysis_code):
    for collection in input_array:
        actual_code = collection["code"]
        mask_to_re = actual_code.replace("X", "[\d\D]")
        pattern = re.compile("^" + mask_to_re + "$")
        if pattern.match(analysis_code):
            print("Found collection '" + str(collection["collection"]) + "' for code: " + str(analysis_code))
            return collection["collection"]
        
res = get_collection_from_code("010610")
print(res)

这里的问题是,如果我输入代码 010610 (并且我想返回 two),它会返回 one 也匹配首先是模式 XXXX10

为了更好地理解,如果我输入值,我希望得到这些输出:

010610 > two
010010 > one
123420 > three

最佳答案

您可以迭代整个集合,保存任何匹配的“X”部分的长度,然后返回最短的:

input_array = [{"code": "XXXX10", "collection": "one"}, {"code": "XXX610", "collection": "two"}, {"code": "XXXX20", "collection": "three"}]   

def get_collection_from_code(analysis_code):
    results = {}
    for collection in input:
        actual_code = collection["code"]
        mask_to_re = actual_code.replace("X", "[\d\D]")
        pattern = re.compile("^" + mask_to_re + "$")
        if pattern.match(analysis_code):
            results[collection["collection"]] = actual_code.count('X')
    if len(results):
        best = sorted(results.items(), key=lambda i:i[1])[0]
        print("Found collection '" + str(best[0]) + "' for code: " + str(analysis_code))
        return best[0]

res = get_collection_from_code("010610")
# Found collection 'two' for code: 010610

注意,我已经保存了所有匹配项,以防您想以任何方式处理它们。否则,您可以只在每次迭代中检查“最佳”匹配并更新它。

关于python - 使用掩码和正则表达式从数组中获取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77514237/

相关文章:

python - PyQt 访问动态创建的 Label 和 LineEdit

Python - 如何查看*所有* HTTP 连接进出我的机器?

python - 是否需要 Negative Look behind?

python - 用 Python re 替换为自定义函数

python - 对 groupby pandas 数据框的算术运算

python - 添加行/列时维护公式

mysql - 正则表达式模式不适用于 MySQL 正则表达式

Java 正则表达式 : What is the best way to filter out the keyboard characters?

python - 我可以添加带有可选字符列表的非捕获组吗?

python - 基于不同模式(在单个表达式中)拆分文本的正则表达式