浅谈正则表达式在.net的运用-C#程序抓取网页信息

来源:互联网 发布:新闻专栏数据库设计 编辑:程序博客网 时间:2024/06/05 18:03

引:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。

功能:运用正则表达式,可以找寻到指定格式,按照表达式所规范的语法字符串片段检查。

运用实例描述:

抓取资料,提取json格式的字符片段,并解析,存储到数据库中。当中使用了WebRequest等类库进行获取网页信息;Regex类库进行解析提取;JsonTextParser等类库进行解析json格式的变量;SqlConnection等进行数据库传输。性能和解析程度都比较高,但是要求正则表达式的设计能力较高。

以下是代码部分:

 

 #region  address        static void downloadadd(SqlConnection conn)        {            SqlConnection connn = new SqlConnection("Data Source=192.168.0.2;Initial Catalog=HKSO;Persist Security Info=True;User ID=zhisheng;pwd=password.123");            connn.Open();            SqlCommand sqlcmd = connn.CreateCommand();            sqlcmd.CommandText = "SELECT distinct [ceref]  FROM [HKSO].[dbo].[Corporation]";            SqlDataReader dr = sqlcmd.ExecuteReader();            dr.Read();            #region repeat in name            while (dr.Read())            {                #region get content                WebRequest request = WebRequest.Create("http://www.sfc.hk/publicregWeb/corp/" + dr["ceref"] + "/co");                request.Credentials = CredentialCache.DefaultCredentials;                HttpWebResponse response = (HttpWebResponse)request.GetResponse();                Stream dataStream = response.GetResponseStream();                StreamReader reader = new StreamReader(dataStream);                string responseFromServer = reader.ReadToEnd();                reader.Close();                dataStream.Close();                response.Close();                #endregion                #region define values                string tel = "";                string fax = "";                string email = "";                string fullAddress = "";                string fullAddressChin = "";                string centralEntity = "";                #endregion                #region get json                Regex regex = new Regex(@"\[\{().*\}\]");                MatchCollection mth = regex.Matches(responseFromServer);                foreach (Match m in mth)                {                    try                    {                        JsonTextParser parser = new JsonTextParser();                        JsonObject obj = parser.Parse(m.Value);                        List<JsonObject> newfiled = (List<JsonObject>)obj.GetValue();                        for (int k = 0; k < newfiled.Count; k++)                        {                            foreach (JsonObject field in newfiled[k] as JsonObjectCollection)                            {                                switch (field.Name)                                {                                    case "tel":                                        tel = (field.GetValue() == null ? "null" : field.GetValue().ToString());                                        break;                                    case "fax":                                        fax = (field.GetValue() == null ? "null" : field.GetValue().ToString());                                        break;                                    case "email":                                        email = (field.GetValue() == null ? "null" : field.GetValue().ToString());                                        break;                                    case "address":                                        {                                            foreach(JsonObject  add in field as JsonObjectCollection)                                            {                                                switch (add.Name)                                                {                                                    case "fullAddress":                                                        fullAddress = (add.GetValue() == null ? "null" : add.GetValue().ToString());                                                        break;                                                    case "fullAddressChin":                                                        fullAddressChin = (add.GetValue() == null ? "null" : add.GetValue().ToString());                                                        break;                                                    case "centralEntity":                                                        centralEntity = (add.GetValue() == null ? "null" : add.GetValue().ToString());                                                        break;                                                    default :                                                        break;                                                }                                            }                                        }                                        break;                                    default:                                        break;                                }                            }                            //                            SqlCommand cmd = new SqlCommand("insert dbo.Address values ('" + dr["ceref"] + "','" + tel + "','" + fax + "','" + email + "','" + fullAddress + "','" + fullAddressChin + "','" + centralEntity + "')", conn);                            cmd.ExecuteNonQuery();                        }                    }                    catch (Exception exx)                    {                    }                    finally                    {                    }                }                #endregion            }            #endregion            connn.Dispose();            connn.Close();        }        #endregion

小记:

在C#中使用正则表达式,调用regex函数要注意一些转换

(1)@“”字符串

(2)"要用""

(3)<>/#@$等符号要在前面加\

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 夏天骑摩托车戴头盔热怎么办 头盔玻璃罩边固定老是掉怎么办 电动车不戴头盔被扣车怎么办 郴州骑电动车没戴头盔怎么办 配置数据源时发现两个版本怎么办 微信占用内存3g怎么办 打印机显示内存已满怎么办 网页显示代理服务器连接失败怎么办 墙内线路断了怎么办 墙里的电线坏了怎么办 鱼竿最前端断了怎么办 下雨天墙壁与管道间漏水怎么办 电饭锅的电线被雨淋了怎么办 钢琴跨八度手短怎么办 弹钢琴手指不灵活怎么办呢? 理发剪不锋利了怎么办 室外宽带线断了怎么办 接宽带光纤太短怎么办 装修光纤网线太短怎么办 宽带入户线断了怎么办 电信有无线没网怎么办 墙里的网线断了怎么办 墙里网线断了怎么办 3根网线断了怎么办 剪了层次的头发怎么办 小米6充电线坏了怎么办 小米6导航信号弱怎么办 麦多多充不了电怎么办 一加数据线坏了怎么办 小米耳机泡水了怎么办 公司拖欠工资公司破产了怎么办 苹果x外壳掉漆怎么办 手机壳按键很硬怎么办 棉质白衣服染色怎么办 白棉t恤混洗染色怎么办 包包被衣服染色了怎么办 白色衣服染了菜汁怎么办 一加3t屏幕刺眼怎么办 怀孕吃了好多杏怎么办 门破了个洞怎么办 钢圈轮毂刮花了怎么办