街道地址中单词的正则表达式

Regex for words in street addresses

我知道依赖正则表达式获取街道地址的危险。但是,我必须使用正则表达式,而且我的地址都是澳大利亚的,并且格式良好,来自一个受监管的来源。

我成功地使用群组 return 来自以下

的街道号码和街道名称
1 Main Street, Sydney NSW 2000
1A Main Street, Sydney NSW 2000
1/20 Main Street, Sydney NSW 2000
1/20A Main Street, Sydney NSW 2000
U1/20A Main Street, Sydney NSW 2000

我的 (PHP) 表达式是 ~([\w\d\-\/\.\&]*)\s*([\w\d '\-\.\ ()]+)~

但是我在调​​整它以使用它时遇到了问题:

Unit 1/20 Main Street, Sydney NSW 2000

我的群组给我 'Unit' 和“1”

fiddle 在这里:https://regex101.com/r/aLRNgp/1

我认为有问题的正则表达式仅用于匹配您地址中的门牌号和街道名称部分。您的正则表达式看起来很复杂,但是要使用前缀 Unit 解决问题:

^((?:Unit )?[\w\-\/\.\&]*)\s*([\w '\-\.\ ()]+)

Demo