0

name、street1、street2、city、state、zip を抽出する必要があります

この形式のデータがあります

JOHN m SMITH [1111 WEST OAK ROAD, SUITE 101, CITY, ST 55555]
GEORGE m JONES [222 MAIN STREET, CITY, ST 55555]

JOHN の結果は次のようになります。

name="JOHN m SMITH"
street1="1111 WEST OAK ROAD"
street2="SUITE 101"
city = "CITY"
state = "ST"
zip = "55555"

これはGEORGEのデータで動作します

            Regex r = new Regex(@"^(?<name>.*)\[(?<street>.*)[,]\s(?<city>.*)[,]\s(?<state>.*)\s(?<zip>\d{5})\]$");
            var match = r.Match(fullNameAndAddress);
            name = match.Groups["name"].Value;
            street = match.Groups["street"].Value;
            city = match.Groups["city"].Value;
            state = match.Groups["state"].Value;
            zip = match.Groups["zip"].Value;

オプションの street2 を追加するにはどうすればよいですか?

1 つだけの「ストリート」グループが必要です。これが必要だと思いました: (....){1}?

street2 はオプションで、0 回または 1 回です。これがあればいいなと思いました(...)?

ただし、JOHN のデータでは機能しません。street1 と street2 の両方が street グループに入ります。

^(?<name>.*)\[((?<street>.*)[,]\s){1}?((?<street2>.*)[,]\s)?(?<city>.*)[,]\s(?<state>.*)\s(?<zip>\d{5})\]$
4

2 に答える 2

3

通りに何を保管したいのか明確にできますか?

ジョンを「1111WESTOAKROAD、SUITE101」のように見せたいですか?

または、使用しない変数に詰め込んで、通りが「1111 WEST OAKROAD」のようになるようにしますか?

編集:明確に、このリンクをチェックしてください

http://rubular.com/r/S4HaTMVFZl

ここで何が起こるかというと、*は貪欲であり、[、]\sの最終的な出現を見つける前に可能な限り多くをつかんでいると私は信じています

?を追加する 。*がそれを怠惰にし、可能な限り最小限の情報を取得した後。

修正された正規表現は次のようになります

^(?<name>.*)\[((?<street>.*?)[,]\s)((?<street2>.*)[,]\s)?(?<city>.*)[,]\s(?<state>.{2})\s(?<zip>\d{5})\]$

状態の正規表現を。*から.{2}に変更し、2文字の状態を強制していることに気付くでしょう。必要ない場合は、元に戻してください:)

于 2012-09-20T02:38:26.180 に答える
0

rubular.com の正規表現にいくつかの変更を加えましたが、両方の例の文字列で機能しているように見えました。

^(?<name>.+)\s\[(?<street>[^,]+),\s((?<street2>[^,]+),\s+)?(?<city>[^,]+),\s(?<state>.+)\s(?<zip>\d{5})\]$

street2 = match.Groups["street2"].Value;

私が正規表現で学んだトリックの 1 つは、.* の代わりに区切り記号の否定 (例: [^,]* はカンマ以外) を使用することです。そのため、1 つの式で複数のフィールドをキャプチャすることは不可能です。また、少なくとも 1 つの一致を必要とする + 演算子は、ほとんどのグループで役立ちます。

また、追加のコンマは、住所の street2 コンポーネントがある場合にのみ存在します。これは、コンマが street2 部分と同じキャプチャ グループにある必要があることを示します。これを考慮して、street2 キャプチャ グループの周りに追加のキャプチャ グループを追加しました。ほとんどの言語でグループを非キャプチャにすることができますが、必要ではないようです。

于 2012-09-20T02:59:56.777 に答える