我对 python 中的正则表达式有点问题,我熟悉 PHP 中的这个正则表达式脚本:https://gist.github.com/benvds/350404,但在 Python 中,使用 re
模块,我一直没有得到任何结果:
re.findall(r"#^([\w[:punct:] ]+) ([0-9]{1,5})([\w[:punct:]\-/]*)$#", "Wilhelminakade 173")
输出为 []
有什么想法吗?
答案 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,并期望它能够工作。