一尘不染

仅从正则表达式返回匹配项的一部分

c#

说我的字符串“ User
Name:firstname.surname”包含在一个较大的字符串中,如何使用正则表达式来获取firstname.surname部分?

我尝试过的每种方法都返回字符串“ User Name:firstname.surname”,然后我必须将“ User Name:”上的字符串替换为空字符串。

后面的引用可以在这里使用吗?

编辑:

较长的字符串可能包含“帐户名:firstname.surname”,因此为什么我还要匹配字符串的“用户名:”部分以获取该值。


阅读 567

收藏
2020-05-19

共1个答案

一尘不染

我喜欢使用命名组:

Match m = Regex.Match("User Name:first.sur", @"User Name:(?<name>\w+\.\w+)");
if(m.Success)
{
   string name = m.Groups["name"].Value;
}

?<something>组的开头放在括号中(例如(?<something>...)),可以使用something键作为键从匹配项中获取值(例如从m.Groups["something"].Value

如果您不想麻烦地命名组,可以说

Match m = Regex.Match("User Name:first.sur", @"User Name:(\w+\.\w+)");
if(m.Success)
{
   string name = m.Groups[1].Value;
}

并获得匹配的第一件事。(请注意,第一个带括号的组位于index 1;匹配的整个表达式位于index 0

2020-05-19