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?
Annonceindlæg fra Infor
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
Håber det gav lidt mening ...
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(); } } }
Tak for svarene, Tak Arne_v det virker perfekt. Læg et svar hvis i vil have Point.
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.
Nice, kan i hvert fald godt lide du havde samme ide til at løse det som mig, med Groups :-) mvh
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.