Avatar billede thomaxz Nybegynder
06. maj 2011 - 21:29 Der er 6 kommentarer og
1 løsning

Regular Expressipon Find adresse

Text:

Abc
Enghavevej 225
4250 Røskilde

Evt:

Abc, Enghavevej 225, 4250 Røskilde

Evt:

Abc, Enghavevej 225 4250 Røskilde

Evt:

Abc
Enghavevej 225 D
4250 Røskilde

Evt:

Abc
Enghavevej 225 5 th.
4250 Røskilde

Evt:

Abc
Enghavevej 225 dør 1
4250 Røskilde

Evt:

Abc
Enghavevej 225 st. tv
4250 Røskilde

************************************************************

Jeg prøvet bruge Regular Expression til finde en adresse og retunere

posnr by for sig
vejnavn nr for sig
og person/firma/organisation navn for sig.

*********************************************************

Har fundet et regexp der virker til postnr by

[0-9]{4} [A-ZÆØÅ]+[a-zæøå]+

**********************************************************

Jeg har pøvet lidt med flg. regular expression for vejnavn + nr.

[A-ZÆØÅa-zæøå]+ [0-9]+\s*[A-ZÆØÅa-zæøå]*[0-9]{0,2}\.*\s*[A-ZÆØÅa-zæøå]*\.*\s*[0-9]*

Men når jeg kør den på fgl.

Text:

Abc
Enghavevej 225 4250 Røskilde

får jeg vennavn og nr , men jeg får alle fire tal i postnr, selvom jeg {0,2}?

Er der nogen der en idé ti hvordan jeg kun får de 2 også selv om de står samme linje, stadig kan finde ud af det hvis det var sal numre?
Avatar billede Syska Mester
06. maj 2011 - 21:47 #1
Der skal vel være et nummer, så du skal vel bruge {1,3}.

Jeg ville nok udvide dit regex så den tager postnummer og by med i samme udtryk. Derefter så lave en group på den og give den ud.

() <- Lave en group som du nemt via .NET i hvert fald kan give ud, det har jeg brugt mange gange.

// skal match 4 tal og så et navn, kombineret med dit andet så burde den lade være med at tage postnummer med.
([0-9]{4}) ([A-z]{1,})

Hvordan ser de stringe ud du prøver at match? Hvis det er en lang string så match det hele i samme regex.

mvh
Avatar billede Syska Mester
06. maj 2011 - 21:48 #2
Håber det gav lidt mening ...
Avatar billede arne_v Ekspert
06. maj 2011 - 21:59 #3
Mit bud:

using System;
using System.Text.RegularExpressions;

namespace E
{
    public class Program
    {
        private static readonly Regex re = new Regex(@"([A-Za-zÆØÅæøå ]+)[\s,]+([A-Za-zÆØÅæøå]+ \d+[\w .]*)[\s,]+(\d{4} [A-Za-zÆØÅæøå ]+)", RegexOptions.Compiled | RegexOptions.Singleline);
        public static string[] AddrSplit(string s)
        {
            string[] res = new string[3];
            Match m = re.Match(s);
            if(m.Success)
            {
                res[0] = m.Groups[1].Value;
                res[1] = m.Groups[2].Value;
                res[2] = m.Groups[3].Value;
            }
            return res;
        }
        private static void Test(string s)
        {
            Console.WriteLine(s);
            Console.WriteLine("-->");
            string[] parts = AddrSplit(s);
            Console.WriteLine(parts[0]);
            Console.WriteLine(parts[1]);
            Console.WriteLine(parts[2]);
            Console.WriteLine("==========");
        }
        public static void Main(string[] args)
        {
            string[] sa = {
@"Abc
Enghavevej 225
4250 Røskilde",
@"Abc, Enghavevej 225, 4250 Røskilde",
@"Abc, Enghavevej 225 4250 Røskilde",
@"Abc
Enghavevej 225 D
4250 Røskilde",
@"Abc
Enghavevej 225 5 th.
4250 Røskilde",
@"Abc
Enghavevej 225 dør 1
4250 Røskilde",
@"Abc
Enghavevej 225 st. tv
4250 Røskilde" };
            foreach(string s in sa)
            {
                Test(s);
            }
            Console.ReadKey();
        }
    }
}
Avatar billede thomaxz Nybegynder
06. maj 2011 - 22:48 #4
Tak for svarene, Tak Arne_v det virker perfekt.

Læg et svar hvis i vil have Point.
Avatar billede arne_v Ekspert
06. maj 2011 - 22:53 #5
svar
Avatar billede arne_v Ekspert
06. maj 2011 - 22:56 #6
Koden er ikke perfekt.

Men det er svaert at se forskel paa:

Jens J Jensen Jvej 1
Jens Jensen J Vej 1

Det er faktisk umuligt uden dictionary.

Hvi sman insisterer paa at der enten skal vaere komma elle rlinieskift saa kan det loeses.

regex skal aendres en lille smule saa.
Avatar billede Syska Mester
06. maj 2011 - 23:16 #7
Nice, kan i hvert fald godt lide du havde samme ide til at løse det som mig, med Groups :-)

mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester