2024-05-14 20:33:07 发布
网友
我正在尝试将街道名称与具有以下模式的街道编号分开:
在php和python中,获取街道名称的regex是什么,获取街道编号的regex是什么?
注意:号码总是在街道名称之后,所以我想应该缩短它。
谢谢。
一般来说,地址并不总是这么干净。尤其是如果这些数据直接来自用户,你必须考虑到不是每个人都有这样的标准地址。有邮政信箱,乡村路线,31 1/2s,套房,街道类型(道路,街道,圆圈,法院等,加上所有缩写)的变化吨。街道名称中的空间,房屋编号中的天花乱坠,地址的复杂性很容易被低估。混合使用非美国地址的可能性,复杂性会成倍增加。
31 1/2
这个巨大的函数试图理解所有这些(至少就美国邮报而言):http://codepad.org/pkTdUDL6我有这个函数,所以它可能需要调整或细化。如果没有其他东西,它应该能让你了解在试图使用户地址数据保持正常时所面临的任务。
这也使得将门牌号、街道名称和街道类型分割成不同的字段变得很有诱惑力。如果解析地址的准确性对您的系统设计至关重要,那么您可能需要考虑它;例如,房地产系统需要对此数据具有这种粒度级别。如果您的用例并不严格依赖于准确分析这些数据的能力,那么我建议不要向用户展示所有这些额外的字段。只要把他们的地址记下来,试着把它清理干净,然后在你的系统的其他设计中预测一些不一致的地方。
试试这个,看看它是否适合你:
$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 );
你唯一需要的是:
// 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]; }
我建议最好的方法来确定什么时候开始的数字是当你击中一个数字。因此,您可以使用
preg_match('/^([^\d]*[^\d\s]) *(\d.*)$/', $address, $match)
示例:
'Bubbletown 145' => 'Bubbletown', '145' 'Circlet56a' => 'Circle', '56a' 'Bloomfield Avenue 68' => 'Bloomfield Avenue', '68' 'Quibbit Ave 999a' => 'Quibbit Ave', '999a' 'Singletown551abc' => 'Singletown', '551abc'
最好考虑如何处理边缘情况,然后编写一个单元测试来测试自己的Regex函数。
一般来说,地址并不总是这么干净。尤其是如果这些数据直接来自用户,你必须考虑到不是每个人都有这样的标准地址。有邮政信箱,乡村路线,
31 1/2
s,套房,街道类型(道路,街道,圆圈,法院等,加上所有缩写)的变化吨。街道名称中的空间,房屋编号中的天花乱坠,地址的复杂性很容易被低估。混合使用非美国地址的可能性,复杂性会成倍增加。这个巨大的函数试图理解所有这些(至少就美国邮报而言):http://codepad.org/pkTdUDL6我有这个函数,所以它可能需要调整或细化。如果没有其他东西,它应该能让你了解在试图使用户地址数据保持正常时所面临的任务。
这也使得将门牌号、街道名称和街道类型分割成不同的字段变得很有诱惑力。如果解析地址的准确性对您的系统设计至关重要,那么您可能需要考虑它;例如,房地产系统需要对此数据具有这种粒度级别。如果您的用例并不严格依赖于准确分析这些数据的能力,那么我建议不要向用户展示所有这些额外的字段。只要把他们的地址记下来,试着把它清理干净,然后在你的系统的其他设计中预测一些不一致的地方。
试试这个,看看它是否适合你:
你唯一需要的是:
我建议最好的方法来确定什么时候开始的数字是当你击中一个数字。因此,您可以使用
示例:
最好考虑如何处理边缘情况,然后编写一个单元测试来测试自己的Regex函数。
相关问题 更多 >
编程相关推荐