欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#初学36 字符串提取 贪婪模式

程序员文章站 2022-03-07 19:40:43
static void Main(string[] args){ string str = "犯大货撒可富接电话萨科技和23432付款的说法2020来接收03 接口的了房间30"; 一般字符串提取不加^和$ --Regex.Match()只能提取一个匹配,结果为23432,后面的数字不提取 Match match = Regex.Match(str, @"[0-9]+"); Console.WriteLine(match.Value); --Rege...
static void Main(string[] args)
{
    string str = "犯大货撒可富接电话萨科技和23432付款的说法2020来接收03 接口的了房间30";
    一般字符串提取不加^和$
    		--Regex.Match()只能提取一个匹配,结果为23432,后面的数字不提取
    Match match = Regex.Match(str, @"[0-9]+");
    Console.WriteLine(match.Value);
    		--Regex.Matches()提取字符中的所有匹配
    MatchCollection matches = Regex.Matches(str, "[0-9]+");
    foreach (var item in matches)
    {
        Console.WriteLine(item);
    }
    Console.ReadLine();
}
static void Main(string[] args)
{
    --从文件中提取字符串
    string email = File.ReadAllText("email.txt");
    --如果想对已经匹配的字符串再进行分组提取,就用到了"提取组"的功能
    --通过添加()就能实现提取组,()既有改变优先级的作用,又有提取组的功能
    (()(()))()  从左到右第一个(括号为第一组,第二个(为第二组,以此类推
    MatchCollection matches= Regex.Matches(email, @"([-a-zA-Z_0-9.])+@([-a-zA-Z_0-9.])+(\.[a-zA-Z]+)+");
    foreach (Match item in matches)
    {
        --item.Value表示本次提取到的字符串
        --item.Groups结合中存储的就是所有的分组信息
        --item.Groups[0]与item.Value是等价的都表示本次提取到的完整的字符串,表示整个邮箱字符串,而item.Groups[1].Value则表示第一组的字符串,以此类推。
        Console.WriteLine(item.Value);
        Console.WriteLine("第0组:{0}", item.Groups[0].Value);
        
        Console.WriteLine("第1组:{1}", item.Groups[1].Value);
        Console.WriteLine("第2组:{2}", item.Groups[2].Value);
    }
    Console.ReadLine();
}

贪婪模式

 static void Main(string[] args)
{
    --贪婪模式
    --贪婪: .+(默认贪婪模式,尽可能多的匹配)
    --非贪婪:.+?(尽可能少的匹配,1个)
    string str = "1111.1111.111111.111.11";
    Match match = Regex.Match(str,".+"); 尽可能多的去匹配,默认按照贪婪模式匹配
    Match match2 = Regex.Match(str, ".+?"); 挡在限定符之后使用?的时候,表示终止贪婪模式,会尽可能少的匹配
    Console.WriteLine(match.Value);
    Console.WriteLine(match2.Value);

    string str3 = "1111。1111。111111。111。11";
    Match match3 = Regex.Match(str3, ".+?.");  只匹配到1111。后面的不匹配
    Console.WriteLine(match3.Value);

    string str4 = "大家好,我们是S.H.E。我是光头、我是长舌妇、我是土豪,我是&西瓜(。看电视剧弗兰克jlkdfjl";
    MatchCollection matches = Regex.Matches(str4,"我是(.+)。");
    foreach (Match item in matches)
    {
        Console.WriteLine(item.Groups[1].Value); 输出结果为 光头、我是长舌妇、我是土豪,我是&西瓜(
    }
    Console.ReadKey();
}

本文地址:https://blog.csdn.net/Tianwen55/article/details/107253597