freshman2017
Goto Top

Visual Studio - Trennung von Werten über reguläre Ausdrücke

Guten Morgen,

ich versuche mit nachfolgendem Skript Werte (Straße von der Hausnummer) allerdings bekomme ich noch nicht ganz das gewünschte Ergebniss.

Bisher erhalte ich nur folgende Ausgabe:

          
             1 Teststreet -> Teststreet :: 1
           1 a Teststreet -> Teststreet :: 1 a
            1a Teststreet -> Teststreet :: 1a
             Teststreet 1 -> Teststreet :: 1
           Teststreet 1 a -> Teststreet :: 1 a
            Teststreet 1a -> Teststreet :: 1a
         Teststreet 1 a-f -> Teststreet :: 1 a-f
          Teststreet 1a-f -> Teststreet :: 1a-f
   Teststreet 1-400 ss-ss -> Teststreet :: 1-400 ss-ss
         1 a-f Teststreet -> Teststreet :: 1 a-f
          1a-f Teststreet -> Teststreet :: 1a-f
      67 a-g Musterstraße -> Musterstraße :: 67 a-g
      67a-g Muster straße -> Muster straße :: 67a-g
Ernst-Thäl-mann-stra-sse 8 -> Ernst-Thäl-mann-stra-sse :: 8
        203 East 50th St. -> East :: 203
          12th Street 123 -> 12th Street :: 123
      Musterstraße 67 a-g -> Musterstraße :: 67 a-g
       Musterstraße 67a-g -> Musterstraße :: 67a-g
                   D1 4-8 ->  :: D1 4-8
Johann-G.-Gutenbergstr 22 A -> Johann-G.-Gutenbergstr :: 22 A
Johann - G. - Gutenbergstr 22 A -> Johann :: - G. - Gutenbergstr 22 A
Johann-G.-Gutenbergstraße 22 A -> Johann-G.-Gutenbergstraße :: 22 A
Johann-G.-Gutenbergstr. 22 A -> Johann-G.-Gutenbergstr :: . 22 A
      King George V 3a(1) -> King George V :: 3a(1)
      3a(1) King George V -> King George V :: 3a(1)

Leider passt es noch nicht ganz bei den Straßen: Johann - G. - Gutenbergstr 22 A, D1 4-8, 203 East 50th St. , Johann-G.-Gutenbergstr. 22 A

Kann mir da jemand von Euch helfen?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualBasic;
using System.IO;
using System.Threading;
using System.Text.RegularExpressions;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string args)
        {
            string tests = new string {
    "1 Teststreet",  
    "1 a Teststreet",  
    "1a Teststreet",  
    "Teststreet 1",  
    "Teststreet 1 a",  
    "Teststreet 1a",  
    "Teststreet 1 a-f",  
    "Teststreet 1a-f",  
    "Teststreet 1-400 ss-ss",  
    "1 a-f Teststreet",  
    "1a-f Teststreet",  
    "67 a-g Musterstraße",  
    "67a-g Muster straße",  
    "Ernst-Thäl-mann-stra-sse 8",  
    "203 East 50th St.",  
    "12th Street 123",  
    "Musterstraße 67 a-g",  
    "Musterstraße 67a-g",  
    "D1 4-8",  
    "Johann-G.-Gutenbergstr 22 A",  
    "Johann - G. - Gutenbergstr 22 A",  
    "King George V 3a(1)",  
    "3a(1) King George V",  
  };

            string result = string.Join(Environment.NewLine, tests
              .Select(test => new {
                  raw = test,
                  address = SplitStreet(test)
              })
              .Select(test => $"{test.raw,25} -> {test.address.street} :: {test.address.number}"));  

            Console.Write(result);
            Console.ReadKey();
        }

        private static (string street, string number) SplitStreet(string value)
        {
            int count = value.Count(f => f == '-');  
            string pattern="";  
            for (int i = 0; i < count; i++)
            {
                pattern = pattern + @"\p{P}{0,}\p{L}{1,}";  
            }
            var match = Regex.Match(value, @"\p{N}{0,}\p{L}{2,}" + @pattern + @"\p{N}{0,}(?:\s\p{L}+)*");  

            string street = match.Value;

            string number = (match.Index > 0)
              ? value.Substring(0, match.Index)
              : value.Substring(match.Index + match.Length);

            return (street, number.Trim());
        }
    }
}



Ich freue mich auf eure Rückmeldung,

Beste Grüße.

Content-Key: 930735601

Url: https://administrator.de/contentid/930735601

Printed on: April 24, 2024 at 05:04 o'clock