这个简单的正则表达式中的更正

时间:2012-08-03 07:50:16

标签: c# regex

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

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

此RE用于以下字符串:

somename@somenumber

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

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

此处ac.name读取完整字符串,ac.number读取 somenumber 。我在ac.name中哪里错了?

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

此正则表达式为correct。我认为你的错误在其他地方。你似乎使用C#。所以,你应该考虑regex usage in the language

在MSDN中查看the code sample,您需要在访问Groups时使用从1开始的索引而不是从零开始(同样也是Kent suggested) 。所以,使用这个:

String name   = m.Groups[1].Value;
String number = m.Groups[2].Value;

答案 2 :(得分:1)

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

Groups[1]将包含名称

Groups[2]将包含数字

答案 3 :(得分:0)

我认为你应该将+移到捕获组中:

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

答案 4 :(得分:0)

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

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

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

更新:转义了。

如果您只想要一个匹配(因此原始表达式中的^),请使用.Match而不是.Matches方法。请参阅MSDN documentation on Regular Expression Classes