Python正则表达式拆分荷兰地址

时间:2021-02-25 12:08:23

标签: python regex re

我对 python 中的正则表达式有点问题,我熟悉 PHP 中的这个正则表达式脚本:https://gist.github.com/benvds/350404,但在 Python 中,使用 re 模块,我一直没有得到任何结果:

re.findall(r"#^([\w[:punct:] ]+) ([0-9]{1,5})([\w[:punct:]\-/]*)$#", "Wilhelminakade 173")

输出为 []

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

PHP 支持替代字符作为正则表达式分隔符。为此,您的示例 Gist 使用 #。它们不是 PHP 中正则表达式的一部分,在 Python 中根本不需要它们。他们阻止了一场比赛。删除它们。

re.findall(r"^([\w[:punct:] ]+) ([0-9]{1,5})([\w[:punct:]\-/]*)$", "Wilhelminakade 173")

这仍然没有结果,因为 Python 正则表达式不知道 [:punct:] 应该是什么意思。 Python 的 re 不支持 POSIX character classes。将它们替换为其他内容(即您期望的标点符号,可能类似于“点、撇号、破折号”)。这导致

re.findall(r"^([\w.'\- ]+) ([0-9]{1,5})([\w.'\-/]*)$", "Wilhelminakade 173")

给出 [('Wilhelminakade', '173', '')]

长话短说,不同的编程语言有不同的正则表达式引擎。您不能不仔细查看就将正则表达式从 PHP 复制到 Python,并期望它能够工作。