1

次の文字列を指定すると、名前と姓のリストに解析したいと思います。

ピーター・ポール、メアリー&ジョエル・ヴァン・デル・ウィンケル

(およびより単純なバージョン)

正規表現でこれを行うことができるかどうかを調べようとしています。私はここまで持っています

(?:([^, &]+))[, &]*(?:([^, &]+))

しかし、ここでの問題は、姓を別のキャプチャでキャプチャしたいということです。

私は可能性を超えていると思いますが、念のため...

アップデート

グループからキャプチャを抽出するのは初めてだったので、使用した (C#) コードは次のとおりです。

string familyName = "Peter-Paul, Mary & Joël Van der Winkel";
string firstperson = @"^(?<First>[-\w]+)"; //.Net syntax for named capture
string lastname = @"\s+(?<Last>.*)";
string others = @"(?:(?:\s*[,|&]\s*)(?<Others>[-\w]+))*";

var reg = new Regex(firstperson + others + lastname);
var groups = reg.Match(familyName).Groups;
Console.WriteLine("LastName=" + groups["Last"].Value);
Console.WriteLine("First person=" + groups["First"].Value);
foreach(Capture firstname in groups["Others"].Captures)
    Console.WriteLine("Other person=" + firstname.Value);

次のようなケースをカバーするために、受け入れられた回答を少し調整する必要がありました。

ピーター・ポール&ジョセフ・ヴァン・デル・ウィンケル

ピーター・ポール & ジョセフ・ヴァン・デル・ウィンケル

4

2 に答える 2

1

名がスペースを含む 2 つの単語であってはならない (そうでない場合、Peter Paul Van der Winkel は自動的に解析されない) と仮定すると、次の一連のルールが適用されます。

  • (名)、その後に任意の数の (, 名) または (& 名)
  • 残っているのはすべて姓です。

    ^([-\w]+)(?:(?:\s?[,|&]\s)([-\w]+)\s?)*(.*)
    
于 2009-08-24T14:16:10.320 に答える
1

これでうまくいくようです:

((?:[^, &]+\s*[,&]+\s*)*[^, &]+)\s+([^,&]+)
于 2009-08-24T14:26:58.820 に答える