C#正则表达匹配,名称

时间:2015-10-22 23:36:12

标签: c# .net regex string

我在常规表达中很可怕并且可以使用一些帮助。

我得到类似“Tell:IIDString: 456456456:Somebody's Name "的字符串,但有时候数字为零。名称总是以空格结尾。我想提取名称,并认为Regex将是要走的路,但我似乎无法让它工作。

static void Main(string[] args)
{
    string txt = "Tell:IIDString: 456456456:Somebody's Name ";
    // txt = "Tell:IIDString: 0:Somebody's Name ";'
    Match m = Regex.Match(txt, @"Tell:IIDString: \d+:([A-z\']+)\.\w", RegexOptions.IgnoreCase);

    if (m.Success)
    {
        Console.WriteLine(m.Value);
    }
}

1 个答案:

答案 0 :(得分:0)

这是一个匹配整个示例输入的正则表达式,捕获名称并修剪它:

^Tell:IIDString:\s*\d+:(?<name>[A-Z' ]+?)\s*$

请参阅IDEONE demo

string txt = "Tell:IIDString: 456456456:Somebody's Name ";
Match m = Regex.Match(txt, @"^Tell:IIDString:\s*\d+:([A-Z' ]+?)\s*$", RegexOptions.IgnoreCase);
if (m.Success)
   Console.WriteLine(m.Groups["name"].Value); // Note the group is referred by its name

正则表达式匹配:

  • ^ - 字符串开头
  • Tell:IIDString: - 给定字符的文字序列
  • \s* - 0个或更多空格符号
  • \d+: - 一个或多个数字后跟:
  • (?<name>[A-Z' ]+?) - 一个命名的捕获组,我们稍后将通过名称引用,匹配1个或多个拉丁字符,撇号和文字空格(如果有可能,则替换为\s任何空格或\p{Zs},如果只允许水平空格)
  • \s*$ - 字符串末尾有0个或更多个空格符号($是行锚的结尾)。