重複の可能性:
郵送先住所を解析するための正規表現
2 つの形式のいずれかを持つ番地を分割する必要があります。
幹線道路12B 大通り12B
(すべての部品はオプションです)
通りの名前 (メイン)、通りの種類 (道路、考えられる通りの種類のリストは既にあります)、通りの番号 (12)、通りの番号の接尾辞 (B) に分割する必要があります。
何かアドバイス?
これをC#で行う予定です。
重複の可能性:
郵送先住所を解析するための正規表現
2 つの形式のいずれかを持つ番地を分割する必要があります。
幹線道路12B 大通り12B
(すべての部品はオプションです)
通りの名前 (メイン)、通りの種類 (道路、考えられる通りの種類のリストは既にあります)、通りの番号 (12)、通りの番号の接尾辞 (B) に分割する必要があります。
何かアドバイス?
これをC#で行う予定です。
詳細 (道路がどのようにフォーマットされるか) をすべて知っているわけではないことを考えると、この質問に答えるのは非常に難しいですが、できる限りのことをします。
あなたの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を使用してください。
次のようにする必要があります。
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 に関するアクションを実行します。とにかく、あなたの要件は浅いか、安全でない解決策を示しています。