C#匹配单层html的小demo

匹配单层html的小demo,应该能匹配大多数html字符串.多层(嵌套)html标签解析不出来.可能有小bug,我抛砖引玉下,哈哈.

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Text.RegularExpressions;
 6 using System.Threading.Tasks;
 7
 8 namespace ResolveHtmlText
 9 {
10     class Program
11     {
12         static void Main(string[] args)
13         {
14             string text = @"&nbsp;<span style=‘color:#1F497D‘><span>y<span></span>&nbsp; &nbsp;<span style=‘color:#1F497D;‘>1</span>&nbsp;<span style=‘color:#1F497D;background-color:#123456‘>2</span><span style=‘color:#1F497D;background-color:#123456;text-align:center‘>3</span>  <span style=‘color:#1F497D;background-color:#123456;text-align:center;‘>4</span> <span style=‘color:#1F497D;background-color:#123456;text-align:center;tt-l: 134;‘>5</span>ggjf<a>123456</a>";
15             Console.WriteLine("原字符串:" + text);
16             text = text.Replace("\"", "‘");
17             text = text.Replace("&quot;", "‘");
18             text = text.Replace("&nbsp;", "");
19             text = text.Replace("&lt;", "<");//将<的转义码&lt;都替换成<
20             text = text.Replace("&gt;", ">");//将>的转义码&gt;都替换成>
21
22             //string matchStr = @"<\s*[a-zA-Z0-9]+\s*>[^<^>]*<\s*/\s*[a-zA-Z0-9]+\s*>";
23             string matchStr = @"<\s*[a-zA-Z0-9]+\s*[a-zA-Z]+\s*=\s*‘\s*[a-zA-Z]"
24                             + @"+\s*:\s*[^<^>];?‘\s*>[^<^>]"
25                             + @"*<\s*/\s*[a-zA-Z0-9]+\s*>|<\s*[a-zA-Z0-9]"
26                             + @"+\s*(\s*[a-zA-Z-]+\s*=\s*‘(\s*[a-zA-Z-]+\s*:"
27                             + @"\s*[^:^;^<^>]+\s*;\s*)*(\s*[a-zA-Z-]+\s*:\s*"
28                             + @"[^:^;^<^>]+\s*)\s*;?\s*‘\s*)*"
29                             + @"\s*>[^<^>]*<\s*/\s*[a-zA-Z0-9]+\s*>";
30
31             Regex htmlReg = new Regex(matchStr);
32             string result = null;
33             MatchCollection htmlMatchCollection = htmlReg.Matches(text);
34             StringBuilder sb = new StringBuilder();
35
36             foreach (Match m in htmlMatchCollection)
37             {
38                 if (m != null && m.Groups != null && m.Groups.Count > 0)
39                 {
40                     string temp = m.Groups[0].Value;
41                     Console.WriteLine("临时值:" + temp);
42                     //Regex textReg1 = new Regex(@"[^<^>]+");
43                     //Match textMatch1 = textReg1.Match(temp);
44                     //if (textMatch1 != null && textMatch1.Groups != null && textMatch1.Groups.Count > 0)
45                     //{
46                     //    result = textMatch1.Groups[0].Value;
47                     //    sb.Append(result);
48                     //}
49                     Regex textReg = new Regex(@">.+<");
50                     Match textMatch = textReg.Match(temp);
51                     if (textMatch != null && textMatch.Groups != null && textMatch.Groups.Count > 0)
52                     {
53                         result = textMatch.Groups[0].Value;
54                         if (result.Length > 2)
55                         {
56                             result = result.Substring(1, result.Length - 2);
57                             sb.Append(result);
58                         }
59                     }
60                 }
61             }
62
63
64
65             Console.WriteLine("解析出的结果:" + sb.ToString());
66             Console.ReadLine();
67         }
68     }
69 }
时间: 2024-10-19 20:35:49

C#匹配单层html的小demo的相关文章

Nancy之基于Self Hosting的补充小Demo

前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self Hosting Nancy.和Owin 下面的Self Hosting作个补充. 首先是Self Hosting Nancy的补充: 这里主要是介绍一下Topshelf 官网:http://topshelf-project.com/ GitHub地址:https://github.com/Topshe

用backbone实现的一个MVC的小demo

一.Apache配置 本实例需要使用php支持.要现在Apache中配置虚拟目录,在Apache下的httpd-vhosts.conf文件中添加如下代码 <VirtualHost *:80> DocumentRoot "D:/htdocs/backbone_demo" ServerName www.backbonedemo.cn </VirtualHost> 在windows的hosts文件中添加配置,hosts文件的位置在c:\windows\system32

结对项目小DEMO

这次小DEMO主要实现下面两个功能: 实现两个页面的相互跳转 通过多线程实现网络发送请求 本人负责界面与说明文档编写,搭档负责java代码的具体实现. xml代码: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_

React问答小demo

在学习react初期,看了一些视频和资料,react基础知识差不多学完,跟着网上的一个教程,做了一个小型的问答demo. 需求看图说: 1.点击"添加"按钮,显示问题输入表单,再次点击,隐藏表单.同时,点击"取消"按钮,隐藏表单. 2.输入问题标题和内容后,点击"确认"按钮,将问题显示在下方(按照投票数从高到低). 3.每个问题有加票和减票功能,在点击的同时,将问题按照投票数从高到低排序. 实现过程: 一.开发环境和工具 1.npm init (

Nancy之基于Nancy.Owin的小Demo

前面做了基于Nancy.Hosting.Aspnet和Nancy.Hosting.Self的小Demo 今天我们来做个基于Nancy.Owin的小Demo 开始之前我们来说说什么是Owin和Katana 什么是Owin呢? 官网地址:http://owin.org OWIN在.NET Web Servers与Web Application之间定义了一套标准接口,OWIN的目标是用于解耦Web Server和Web Application. 什么是Katana呢? 官网地址:http://kata

第一个spring小demo

工作中用spring有一年多了,基本弄懂了bean配置文件的配置,但是却没有对spring配置文件,加载有更多的认识,今天动手写了第一个spring的小demo. 这个demo之前是想做web版的,但是web的启动比较麻烦,不如直接使用main方法执行直观,所以,就使用main方法来读取配置文件,启动spring. 看一下项目的结构  其中src部分是项目源码 和 配置文件applicationContext.xml WebContent 目录下面的WEB-INF/lib 目录下面存放的是spr

利用block完成回调,小demo一个

利用block完成回调,小demo一个.闲话少说,直接上代码了!O(∩_∩)O~ TestObject.h #import <Foundation/Foundation.h> typedef void (^FinishBlock)(NSString *backStr); @interface TestObject : NSObject //能进行回调的方法 - (void)playSomeTime:(FinishBlock)block; @end TestObject.m #import &q

新手 gulp+ seajs 小demo

首先,不说废话,它的介绍和作者就不在多说了,网上一百度一大堆: 我在这里只是来写写我这2天抽空对seajs的了解并爬过的坑,和实现的一个小demo(纯属为了实现,高手请绕道); 一.环境工具及安装 1.首先,务必先说明,本demo是基于nodeJs环境下开发的,因此要安装nodeJs(地址:https://nodejs.org/en/): 2.接下来安装gulp: 在第一步成功的情况下,安装gulp构建工具,并且将其依赖到项目进来:同时需要安装browser-sync,gulp-seajs-co

Win10 FaceAPI小demo开发问题汇总

最近使用微软牛津计划做一个小demo,使用FaceAPI做一个小应用,实现刷脸的功能.开发的过程中用到几个问题,具体如下: Stream 与IRandomAccessStream转换 sdk需要的是Stream,拍照直接获取到的类型是IRandomAccessStream,虽然可以转换,但IRandomAccessStream转换为Stream之后使用的时候会出现异常, 希望大神看到肯赐教,不胜感激 解决方法是使用FileOpen方法,将图片的路径作为参数传递给方法 MSDN网页上的为Group