Ari*_*ria 7 php python regex preg-replace
我试图将街道名称与具有以下模式的街道号码分开:
获取街道名称的正则表达式是什么,以及在php和python中获取街道号的正则表达式?
注意:这个数字总是在街道名称之后,所以我想这应该缩短它.
谢谢.
我建议确定数字何时开始的最佳方法是当你点击数字时.因此,你会使用
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函数.
尝试一下这个,看看它是否适合你:
$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)
一般来说,地址并不总是那么干净。特别是如果这些数据直接来自用户,你必须考虑到不是每个人都有这样一个标准地址。有邮政信箱、乡村路线、31 1/2s、套房、大量街道类型(道路、街道、圆形、法院等,以及它们的所有缩写)。街道名称中的空格、门牌号中的连字符、地址的复杂性很容易被低估。混合非美国地址的潜力,复杂性呈指数级上升。
这个巨大的功能试图理解所有这些(至少就美国邮政而言):http : //codepad.org/pkTdUDL6我有这个功能,所以它可能需要调整或详细说明。如果不出意外,它应该让您了解在尝试使用户地址数据合理时所面临的任务。
这也使得将门牌号、街道名称和街道类型拆分为单独的字段变得很诱人。如果解析地址的准确性对您的系统设计至关重要,您可能需要考虑;例如,房地产系统需要对这些数据具有这种级别的粒度。如果您的用例并不严重依赖于准确解析这些数据的能力,那么我不建议向用户展示所有这些额外的字段。只需接受他们提供的地址,尝试清理它,并预测系统设计的其余部分中的一些不一致之处。