-1
string  = "First Name: John Last Name: Doe"
string2 = "First Name: John Last Name: Doe de Sour"
regex   = (First Name|Last Name): ([A-Za-z]+)

「de Sour」も含めるように正規表現を変更するにはどうすればよいですか? 次のようにスペースを追加すると:

regex   = (First Name|Last Name): ([A-Za-z ]+)

次に、「姓」もキャプチャします。文字列は電子メールの本文の内容から派生するため、「:」の後の内容を取得するには、名と姓を明示的に検索することが重要です。

期待リターン:["First Name", "John"], ["Last Name", "De Sour"]

Ruby でこれを Hash に変換するので重要です。

4

2 に答える 2

5

これを、名と姓を同時に (異なるキャプチャ グループで) キャプチャする単一の正規表現に変換することをお勧めします。

regex = First Name: ([A-Za-z ]+) Last Name: ([A-Za-z ]+)

キャプチャ グループ 1 にはファースト ネーム、キャプチャ グループ 2 にはラスト ネームがあります。「ファースト ネーム」または「ラスト ネーム」は明示的に呼び出されているため、混同される可能性はありません。

実際に見てみましょう: http://rubular.com/r/qfA68b8PO5

于 2012-12-06T16:29:24.243 に答える
0

これは、サンプル文字列からハッシュを返します。

string  = "First Name: John Last Name: Doe"
string2 = "First Name: John Last Name: Doe de Sour"

Hash[*string.scan(/(First) Name: (.+) (Last) Name: (.+)/).flatten]

=> { "First" => "John", "Last" => "Doe" }

Hash[*string2.scan(/(First) Name: (.+) (Last) Name: (.+)/).flatten]
=> {
    "First" => "John",
     "Last" => "Doe de Sour"
}

そして、これは複数の文字列からハッシュの配列を返します。

[string, string2].map{ |s| Hash[*s.scan(/(First) Name: (.+) (Last) Name: (.+)/).flatten] }
=> [
    [0] {
        "First" => "John",
         "Last" => "Doe"
    },
    [1] {
        "First" => "John",
         "Last" => "Doe de Sour"
    }
]
于 2012-12-06T17:22:23.313 に答える