سؤال

باستخدام Ruby (newb) وRegex، أحاول تحليل رقم الشارع من عنوان الشارع.لا أواجه مشكلة مع الأمور السهلة، لكني بحاجة إلى بعض المساعدة بشأن:

'6223 1/2 S فيغيروا ST' ==> 'S فيغيروا ST'

شكرا للمساعدة!!

التحديث (التحديثات):

'6223 1/2 2ND ST' ==> '2ND ST'

ومن Pesto '221b Baker Street' ==> 'Baker Street'

هل كانت مفيدة؟

المحلول

وهذا من شأنه تجريد أي شيء في الجزء الأمامي من السلسلة حتى يضرب بريد إلكتروني:

street_name = address.gsub(/^[^a-zA-Z]*/, '')

إذا كان من الممكن أن يكون شيء من هذا القبيل "221B بيكر ستريت"، ثم لديك لاستخدام شيء أكثر تعقيدا. هذا يجب أن تعمل:

street_name = address.gsub(/^((\d[a-zA-Z])|[^a-zA-Z])*/, '')

نصائح أخرى

مجموعة مطابقة:

.*\d\s(.*)

إذا كنت تحتاج إلى أن تأخذ أيضا إلى أرقام شقة الاعتبار ما يلي:

.*\d.*?\s(.*)

والتي من شأنها أن تأخذ الرعاية من 123A اسم الشارع

وهذا يجب أن تجريد الأرقام في الجبهة (والمساحة) طالما لا توجد أرقام أخرى في السلسلة. مجرد التقاط المجموعة الأولى (*)

وهناك ستاكوفيرفلوو آخر مجموعة من الأجوبة: تحليل صالحة للاستعمال العنوان، المدينة، الدولة، الرمز البريدي من سلسلة

وأعتقد أن / ياهو نهج فك جوجل هو أفضل، ولكن يعتمد على عدد المرات / عناوين العديد كنت تتحدث عن - وإلا فإن الإجابة المحددة ربما يكون أفضل

ويمكن أن تكون أسماء الشوارع الأرقام كذلك؟ منها مثلا.

1234 45TH ST

وأو حتى

1234 45 ST

هل يمكن التعامل مع الحالة الأولى أعلاه، ولكن الثاني هو الصعب.

وأود أن تقسيم العنوان على مسافات، تخطي أي مكون من مكونات الرائدة التي لا تحتوي على بريد إلكتروني ومن ثم الانضمام إلى بقية. أنا لا أعرف روبي، ولكن هنا هو مثال بيرل الذي يسلط الضوء أيضا مشكلة مع وجهة نظري:

#!/usr/bin/perl

use strict;
use warnings;

my @addrs = (
    '6223 1/2 S FIGUEROA ST',
    '1234 45TH ST',
    '1234 45 ST',
);

for my $addr ( @addrs ) {
    my @parts = split / /, $addr;

    while ( @parts ) {
        my $part = shift @parts;
        if ( $part =~ /[A-Z]/ ) {
            print join(' ', $part, @parts), "\n";
            last;
        }
    }
}

C:\Temp> skip
S FIGUEROA ST
45TH ST
ST

أوه!قد يكون تحليل عنوان بمفرده أمرًا سيئًا للغاية إلا إذا كنت تعمل باستخدام عناوين موحدة.والسبب في ذلك هو أن "الرقم الأساسي" والذي يُطلق عليه غالبًا رقم المنزل يمكن أن يكون في مواقع مختلفة داخل السلسلة، على سبيل المثال:

  1. RR 2 المربع 15 (يمكن أن يكون RR أيضًا طريقًا ريفيًا أو HC أو HCR، وما إلى ذلك)
  2. صندوق بريد 17
  3. 12 ب-7 أ
  4. NW95E235
  5. إلخ.

إنها ليست مهمة تافهة.اعتمادًا على احتياجات التطبيق الخاص بك، فمن الأفضل أن تحصل عليه دقيق المعلومات هي الاستفادة من خدمة الويب للتحقق من العنوان.هناك عدد قليل من مقدمي الخدمات الذين يقدمون هذه الإمكانية.

من أجل الإفصاح الكامل، أنا مؤسس SmartyStreets.لدينا واجهة برمجة تطبيقات خدمة الويب للتحقق من العنوان سيؤدي ذلك إلى التحقق من صحة عنوانك وتوحيده للتأكد من أنه حقيقي ويسمح لك بالحصول على الجزء الأساسي/رقم المنزل.أنت مرحب بك في الاتصال بي شخصيًا لطرح الأسئلة.

و/[^\d]+$/ كما تتطابق مع نفس الشيء، إلا دون استخدام مجموعة الالتقاط.

لمستقبل الرجوع أداة عظيمة للمساعدة في التعابير المنطقية هي http://www.rubular.com/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top