0

C# の RegEx を使用して、アドレスを特定の部分に分割し、それらの部分をパターンに基づいて分割して返します。

ユニット番号は、数字と 1 文字の任意の組み合わせ、または数字とスペースと 1 文字の任意の組み合わせとして定義できます。

つまり、2a、328b、32c はすべてユニット番号です。

住所がある場合-たとえば。

unit 32 a Smith Crescent, Johnsonville

ユニット番号の最後のインスタンスまでのすべてを返すことができる正規表現が必要です

ユニット32a

またはユニット番号の最後のインスタンスを含まず、それ以降のすべて

スミス クレセント、ジョンソンビル

別の (非現実的な) 例:

unit 32a Smith 3 d Crescent, Johnsonville

次のいずれかを取得できるようにしたい:

unit 32a Smith 3 d

また

Crescent, Johnsonville

つまり、次の最後のインスタンスで一致させたい:

 "[0-9][a-z] " or "[0-9] [a-z] "

私はもう試した:

var beforePattern = "^.*[0-9][a-z] ";
            var beforepatternSpace = "^.*[0-9] [a-z] ";
            var afterPattern = "[0-9][a-z] (.*)";
            var afterPatternSpace = "[0-9] [a-z] (.*)";

ただし、after パターンには一致文字列が含まれます。また、どの前/後一致を使用する必要があるかを判断する方法がわかりません(最長の「前」または最短の「後」が有効でなければならないということは別として)

4

2 に答える 2

1

これをC#で使用します

(.*\d\s*[a-z])\s*(.*)

グループ 1 と 2 は今欲しいものを持っています

両方のサンプルでテスト済み。一部のケースが予期されない場合は、より多くの例を提供してください。

一部の C# コード

var match = Regex.Match("unit 32a Smith 3 d Crescent, Johnsonville", @"(.*\d\s*[a-z])\s*(.*)");

var part1 = match.Groups[1].Value;
var part2 = match.Groups[2].Value;
于 2012-06-27T00:36:01.037 に答える
1
var regex = new Regex( "(?<before>.*\d+\s?\w+\s)(?<after>.*)" );

var match = regex.Match( input );

var beforeString = match["before"].Value;
var afterString = match["after"].Value;

正規表現は可能な限り一致するため、探しているものが見つかるはずです

于 2012-06-27T00:42:57.590 に答える