我是正则表达式的新手,我写的那个可能是一个非常简单的,但不知道我错在哪里。
@"^([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中哪里错了?
答案 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。