正则表达式获取带空格的街道号码

时间:2018-02-14 07:39:33

标签: php regex

我还是一个正念新手。

我有"格式很好"地址和数据源只会给我很好的澳大利亚地址。

我到目前为止:

~([\w\d\-\/\.]*)\s*([\w\d '\-\.\ ()]+)~

鉴于地址,

123/500-550 Main Street

它会给我两组(这就是我想要的):

123/500-550
Main Street

但是我一直试图容纳像:

这样的空间
123 / 500-550 Main Street
123  / 500-550 Main Street
123 / 500 - 550 Main Street

我是否可以使用^和前瞻来检测街道名称的开头,例如[\w\d '\-\.\ ()]+,然后获取其左边的所有内容?如果是这样,怎么样?

https://regex101.com/r/kG32Sz/1

2 个答案:

答案 0 :(得分:0)

您可以在数字部分添加空格(删除字母btw)并使用正向前瞻检测街道部分:

([\d\-\/\.\s]*)(?=\s+\w)\s+([\w\d '\-\.\ ()]+)

Demo

答案 1 :(得分:0)

虽然通常不建议,但您可以使用

^                                # start of line
(?P<street_number>[-/\d\h]+)\h+  # capture -, \d and \h => street_number
(?P<street_name>[A-Z][\w\h]+)    # capture sth. with UPPERCASE, 
                                 # followed by \w and \h => street_name
$                                # end of line

请参阅a demo on regex101.com(并注意修饰符!)。

<小时/> 更好地使用带有 以前已知的 街道名称的库(或使用上面的表达式查询它)。
您可以在课程中添加其他允许的字符,例如[-'.\w\h]。请注意,大多数字符不需要在类中进行转义。