-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 中的哈希。

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 回答