3

重複の可能性:
郵送先住所を解析するための正規表現

2 つの形式のいずれかを持つ番地を分割する必要があります。

幹線道路12B
大通り12B

(すべての部品はオプションです)

通りの名前 (メイン)、通りの種類 (道路、考えられる通りの種類のリストは既にあります)、通りの番号 (12)、通りの番号の接尾辞 (B) に分割する必要があります。

何かアドバイス?

これをC#で行う予定です。

4

2 に答える 2

2

詳細 (道路がどのようにフォーマットされるか) をすべて知っているわけではないことを考えると、この質問に答えるのは非常に難しいですが、できる限りのことをします。

あなたの2つの特定の例については、あなたが持つことができます

@"([\d|A-Z]*) ([A-Z|a-z| ]*) ([A-Z|a-z]*)"

最初の回答の順序と一致します


@"([A-Z|a-z| ]*) ([A-Z|a-z]*) ([\d|A-Z]*)"

あなたの2番目の答えと一致します。

例:

        Regex regex = new Regex(@"([\d|A-Z]*) ([A-Z|a-z| ]*) ([A-Z|a-z]*)");

        foreach (Group g in regex.Match("12B Main Road").Groups)
        {

            Console.WriteLine(g.Value);
        }

そのプログラムからの出力は次のようになります

12B Main Road
12B
Main
Road
Press any key to continue . . .

これを変更する方法については 、 Regex Cheat Sheetを使用してください。

于 2012-07-25T14:27:22.580 に答える
0

次のようにする必要があります。

Match m1 = Regex.Match(input, @"^(?<number>\d+[A-Z]?)?((?<name>[a-zA-Z]+)\s)?(?<type>Road|Drive|AndSoOn)?$")
Match m2 = Regex.Match(input, @"^(?<name>[a-zA-Z]+)?\s(?<type>Road|Drive|AndSoOn)?(?<number>\d+[A-Z]?)?$");

次に、Success プロパティを確認し、Regex.Groups に関するアクションを実行します。とにかく、あなたの要件は浅いか、安全でない解決策を示しています。

于 2012-07-25T14:31:37.173 に答える