0

我是正则表达式的新手,我写的可能是一个非常简单的表达式,但不知道我错在哪里。

@"^([a-zA-Z._]+)@([\d]+)"

此 RE 用于以下字符串:

somename@somenumber

现在我正在尝试检索 somename 和 somenumber。这就是我所做的:

ac.name = m.Groups[0].Value;
ac.number = m.Groups[1].Value;

这里 ac.name 读取完整的 string,而 ac.number 读取somenumber。我在 ac.name 中哪里错了?

4

5 回答 5

2

我猜这个正则表达式是正确的,问题是,你得到的 ac.name 不是来自第 1 组,而是来自 group(0),它是整个字符串。试试这个:

ac.name = m.Groups[1].Value;
ac.number = m.Groups[2].Value;
于 2012-08-03T08:01:00.937 回答
1

这个正则表达式是正确的。我认为你的错误在其他地方。您似乎使用 C#。因此,您应该考虑语言中的正则表达式用法

查看 MSDN 中的代码示例,您需要在访问时使用从1 开始的索引,而Groups不是从零开始的索引(正如 Kent建议的那样)。所以,使用这个:

String name   = m.Groups[1].Value;
String number = m.Groups[2].Value;
于 2012-08-03T08:00:12.940 回答
1

使用这个正则表达式(\w+)@(\d+([.,]\d+)?)

Groups[1]将包含名称

Groups[2]将包含数字

于 2012-08-03T08:08:39.970 回答
0

我认为您应该将其+移入捕获组:

@"^([a-zA-Z._]+)@([\d]+)"
于 2012-08-03T07:53:18.430 回答
0

如果这是 C#,请尝试不使用 ^

([a-zA-Z\._]+)@([\d]+)

我刚试了一下,它正确分组

更新:逃脱了 .

如果您只想要一个匹配项(因此原始表达式中的 ^ ),请使用.Match代替.Matches方法。请参阅有关正则表达式类的 MSDN 文档

于 2012-08-03T08:04:40.353 回答