如何使用正则表达式(Python)提取荷兰邮政编码

2024-10-02 16:21:15 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下列表:

[4486AE Capelle aan de Ijsel, 4706TR Amsterdam]

我想提取每个元素的邮政编码

所需输出为:

[4486AE, 4706TR]

我试图在Python中找到荷兰邮政编码的正则表达式。但是,我只找到了一个JavaScript表达式。这就是我迄今为止所尝试的:

import re

test = '4706TR Amsterdam'
match =  re.search(r"/^(?:NL-)?(\d{4})\s*([A-Z]{2})$/i", test)
print(match)

这给了我一个空的结果。这里是我得到表达式的地方:https://rgxdb.com/r/4W9GV8AC

有人知道如何解决这个问题吗?其他SO帖子并不关注荷兰邮政编码的Python表达式


Tags: testimportre元素列表search表达式match
1条回答
网友
1楼 · 发布于 2024-10-02 16:21:15

您尝试的模式/^(?:NL-)?(\d{4})\s*([A-Z]{2})$/i具有Javascript符号

前导和尾随的/是模式分隔符,^$是断言字符串开头和结尾的锚点,/i标志用于不区分大小写的匹配

在Python中,要获得问题中的匹配,可以在单词边界\b之间匹配4位数字和2个大写字符A-Z,以防止部分匹配,而不是使用锚,因为匹配不是唯一的字符串

不区分大小写的匹配可以使用re.IGNORECASE

使用re.search也可以返回None,因此首先检查re.search是否有值,然后使用.group()获取匹配项

import re

test = '4706TR Amsterdam'
match =  re.search(r"\b\d{4}[A-Z]{2}\b", test, re.IGNORECASE)
if match:
    print(match.group())

输出

4706TR

见a Python demo

如果要匹配可选的NL-部分,模式可以是:

\b(?:NL-)?\d{4}[A-Z]{2}\b

Regex demo

相关问题 更多 >