街道名称与街道号码分开

Ari*_*ria 7 php python regex preg-replace

我试图将街道名称与具有以下模式的街道号码分开:

  1. "街12号"---名称:街道,号码:12
  2. "street12"---名称:街道,数量:12
  3. "街道12a"---名称:街道,编号:12a
  4. "street12a"---名称:街道,编号:12a

获取街道名称的正则表达式是什么,以及在php和python中获取街道号的正则表达式?

注意:这个数字总是在街道名称之后,所以我想这应该缩短它.

谢谢.

Rob*_*tin 7

我建议确定数字何时开始的最佳方法是当你点击数字时.因此,你会使用

preg_match('/^([^\d]*[^\d\s]) *(\d.*)$/', $address, $match)
Run Code Online (Sandbox Code Playgroud)

例子:

'Bubbletown 145' => 'Bubbletown', '145'
'Circlet56a' => 'Circle', '56a'
'Bloomfield Avenue 68' => 'Bloomfield Avenue', '68'
'Quibbit Ave       999a' => 'Quibbit Ave', '999a'
'Singletown551abc' => 'Singletown', '551abc'
Run Code Online (Sandbox Code Playgroud)

您可能最好考虑如何处理边缘情况,然后编写单元测试来测试您自己的Regex函数.


b01*_*b01 7

尝试一下这个,看看它是否适合你:

$subjects = array( "street 12", "street12", "street 12a", "street12a" );
foreach( $subjects as $subject )
{
    if ( preg_match('/([^\d]+)\s?(.+)/i', $subject, $result) )
    {
       var_dump( $result );
    }
}
die_r( $result  );
Run Code Online (Sandbox Code Playgroud)

您唯一需要的部分是:

// Find a match and store it in $result.
if ( preg_match('/([^\d]+)\s?(.+)/i', $subject, $result) )
{
    // $result[1] will have the steet name
    $streetName = $result[1];
    // and $result[2] is the number part. 
    $streetNumber = $result[2];
}
Run Code Online (Sandbox Code Playgroud)


Chr*_*ker 6

一般来说,地址并不总是那么干净。特别是如果这些数据直接来自用户,你必须考虑到不是每个人都有这样一个标准地址。有邮政信箱、乡村路线、31 1/2s、套房、大量街道类型(道路、街道、圆形、法院等,以及它们的所有缩写)。街道名称中的空格、门牌号中的连字符、地址的复杂性很容易被低估。混合非美国地址的潜力,复杂性呈指数级上升。

这个巨大的功能试图理解所有这些(至少就美国邮政而言):http : //codepad.org/pkTdUDL6我有这个功能,所以它可能需要调整或详细说明。如果不出意外,它应该让您了解在尝试使用户地址数据合理时所面临的任务。

这也使得将门牌号、街道名称和街道类型拆分为单独的字段变得很诱人。如果解析地址的准确性对您的系统设计至关重要,您可能需要考虑;例如,房地产系统需要对这些数据具有这种级别的粒度。如果您的用例并不严重依赖于准确解析这些数据的能力,那么我不建议向用户展示所有这些额外的字段。只需接受他们提供的地址,尝试清理它,并预测系统设计的其余部分中的一些不一致之处。