0

文字列の番地と番地を取得するには正規表現が必要です。通りの名前が最初から始まり、空白の後に数字が続くまで考えてみましょう

例:

元の文字列: 'Jan van Rijswijcklaan 123' 結果: 通り名として 'Jan van Rijswijcklaan'、番地として '123'。

どんな助けでも大歓迎です。

アップデート

通りの名前と番号を取得できましたが、「123b a1」のような番地があった場合、コードは番地の定義に失敗しました。その結果、番地は「123b a1」ではなく「a1」のみになりました。

したがって、現時点では2つのシナリオを扱っています。

  1. 通り名にアルファベットのみが含まれ、番号に数字のみが含まれる場合 - 「Jan van Rijswijcklaan 123」のように
  2. 通り名に英字のみが含まれ、数字に英数字が含まれる場合 - 「Jan van Rijswijcklaan 123b a1」のように

これが私が試したコードです:

string street = Regex.Match(streetWithNum, @"^[^0-9]*").Value + ";";
string number = Regex.Match(streetWithNum, @"\w\d*\w?\d*$").Value + ";";
4

5 に答える 5

1

私は正規表現のファンではありません。

IEnumerable<string> nameParts = "Jan van Rijswijcklaan 124".Split()
    .TakeWhile(word => !word.All(Char.IsDigit));
string name = string.Join(" ", nameParts);

DEMO

通りの名前と番号の両方を取得する場合:

string[] words = "Jan van Rijswijcklaan 124".Split();
var streetNamePart = words.TakeWhile(w => !w.All(Char.IsDigit));
var streetNumberPart = words.SkipWhile(w => !w.All(Char.IsDigit));
Console.WriteLine("street-name: {0}", string.Join(" ", streetNamePart));
Console.WriteLine("street-number: {0}", string.Join(" ", streetNumberPart));
于 2013-09-13T14:02:00.387 に答える
0

先読みで@Ilya_Ivanovの答えを修正するだけではありません:

var result = Regex.Split(s, @"\s(?=\d)");
于 2013-09-13T14:04:13.600 に答える
0

ここでも正規表現以外のソリューションです。

string str = "Jan van Rijswijcklaan 124";
var array = str.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

string streetname = "";
string streetnumber = "";
foreach (var item in array)
{
     if (Char.IsNumber(item[0]))
         streetnumber += item;
      else
         streetname += item + " ";
}

Console.WriteLine(streetname.TrimEnd());
Console.WriteLine(streetnumber);

出力は次のようになります。

Jan van Rijswijcklaan
124

ここにDEMO.

于 2013-09-13T14:02:53.263 に答える