C# - 使用正则提取,提取组匹配的字符串 120

#头条创作挑战赛#

字符串提取

1 通过Regex类的Match("要提取的字符串","匹配规则")方式提取第一个匹配的子字符串,返回类型一个是Match类的对象,通过其Value属性得到匹配的结果

注意:做字符串提取时,一般都不加^与$;字符串提取操作只是在原字符串中找到匹配规则的一部分子字符串,匹配规则加^与$就是完全匹配(注意:贪婪模式),除非整个原字符串完全匹配规则,否则都不加^与$进行限定

提取第一个匹配的字符串

2 通过Reges类的Matches("要提取的字符串","匹配规则")方法得到所有匹配规则的子字符串,返回类型是一个MatchCollection类型的集合

 string str = "中国中央气象台2023年7月31日发布称"卡努"加强为8级的强台风级";
 //提取所有与年月日有关的字符串
 string reg = @"d+(年|月|日)";
 MatchCollection mts = Regex.Matches(str, reg);
 foreach (Match mt in mts)
 {
     Console.WriteLine(mt.Value);
 }
Console.ReadKey();

提取所有匹配的字符串

字符串提取组

通过为匹配规则加()实现分组提取(可用于统计分类信息)

通过match.Groups[]来获取提取组;注意:索引为0的第1组存储的是整个匹配字符串,获取的提取组应该从索引1开始

在Regex.Match();与Regex.Matches();方法中都可用于提取组

//读取1.html文件到内存中,包含邮箱地址
string str = File.ReadAllText(@"d:1.html");
//提取                         登陆名                   哪个邮箱          .com/.cn ...
string email = @"([a-zA-Z0-9_-.]+)@([a-zA-Z0-9]+)(.[a-zA-Z0-9]+)+";
MatchCollection mts = Regex.Matches(str, email);
            #region 提取组
            //foreach (Match mt in mts)
            //{
            //    //判断当前 mt的值 是否匹配成功
            //    if (mt.Success)
            //    {
            //        //mt.Groups 获取所有分组结果
            //        //分组依据看匹配规则中有几个()
            //        //从mt.Groups[1]算起,用于提取组
            //        //获取整个匹配结果
            //        Console.WriteLine(mt.Groups[0]);//zs316@163.com
            //        //获取登陆名
            //        Console.WriteLine(mt.Groups[1]);//zs316
            //        //获取是哪个邮箱
            //        Console.WriteLine(mt.Groups[2]);//163
            //        //邮箱后缀
            //        Console.WriteLine(mt.Groups[3]);//.com
            //    } 
            //} 
            #endregion
//============================================
//声明使用哪个统计总数的变量
int count_163 = 0, count_qq = 0, count_sina = 0, others = 0;
//循环匹配规则获取的结果集合
foreach (Match mt in mts)
{
    //判断当前分组属于哪个邮箱
    switch (mt.Groups[2].Value)
    {
        case "163":
            count_163++;
            break;
        case "qq":
            count_qq++;
            break;
        case "sina":
            count_sina++;
            break;
        default:
            others++;
            break;
    }
}
Console.WriteLine("使用163邮箱的共有: {0} 个", count_163);
Console.WriteLine("使用qq邮箱的共有: {0} 个", count_qq);
Console.WriteLine("使用sina邮箱的共有: {0} 个", count_sina);
Console.WriteLine("使用其他邮箱的共有: {0} 个", others);
Console.ReadKey();

获取分组信息

展开阅读全文

页面更新:2024-03-01

标签:中央气象台   字符串   风级   挑战赛   正则   后缀   索引   规则   邮箱   类型   方法

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top