html img正则,html中正则匹配img

1.正则匹配html中的img标签,取出img的url并进行图片文件下载;

///

/// 将image标签的src属性的url替换为base64

///

///

/// 返回替换imgurl后的questionHtml

public string GetBase64ImgHtml(string questionHtml)

{

//获取标签[获取某个标签时的表达式]

// Regex regQuestion = new Regex(@"]*?\b[\s\S]*>([\s\S]*)", RegexOptions.IgnoreCase);

string retHtml = string.Empty;

//Regex regImg = new Regex(@"]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase);

//去掉分组中的 \s 防止图片的链接中含有空格导致匹配的url不全的问题

Regex regImg = new Regex(@"]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?[^\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase);

// 搜索匹配的字符串

MatchCollection matches = regImg.Matches(questionHtml);

var list = new List();

// 取得匹配项列表,并逐一替换成imgUrl

foreach (Match match in matches)

{

try

{

string imgUrl = match.Groups["imgUrl"].Value;

string imgType = imgUrl.Substring(imgUrl.LastIndexOf(".") + );

WebClient webClient = new WebClient();

Byte[] imgBytes = webClient.DownloadData(imgUrl);

string imgBase64Data = Convert.ToBase64String(imgBytes);

questionHtml = questionHtml.Replace(imgUrl, $"data:image/{imgType};base64,{imgBase64Data}");

}

catch (Exception ex)

{

continue;

}

}

return questionHtml;

}

通过以上方法,就可以轻松将html中img标签转换为base64;

2.html中img标签中的base64转换为url

其实处理的思路都是一样的,正则匹配base64 的img也都基本一致(]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?[^""'<>]*)[^<>]*?/?[\s\t\r\n]*>)。但是此处还是值得记录一下。获取到img标签中的base64 字符串后,将其转存为本地图片的过程中,部分png格式图片转存失败,在用内存流初始化 BitMap 对象的时,一直报“参数无效错误”,但是用该种方式转存Jpg图片完全OK。

.通过这种方式,部分 png 图片转存时会报错:参数无效

var bytes = Convert.FromBase64String(base64Str);

using(var ms = new System.IO.MemoryStream(bytes, true)){

//var bitmap = new Bitmap(ms);

var bitmap =Image.FromStream();

bitmap.Save(imgPath);

bitmap.Dispose();

ms.Close();

}

.直接改成将字节写入文件的方式处理;解决问题。

var bytes = Convert.FromBase64String(base64Str);

File.WriteAllBytes(imgPath, bytes);

JS中正则匹配的三个方法match exec test的用法

javascript中正则匹配有3个方法,match,exec,test: match是字符串的一个方法,接收一个RegExp对象做为参数: match() 方法可在字符串内检索指定的值,或找到一个或 ...

关于php中正则匹配包括换行符在内的任意字符的问题总结

要使用正则匹配任意字符的话,通常有以下几种方法,这里我分别对每一种方法在使用的过程中做一个总结: 第一种方式:[.\n]*? 示例 ? PHP preg_match_all('/

Python中正则匹配使用findall时的注意事项

在使用正则搜索内容时遇到一个小坑,百度搜了一下,遇到这个坑的还不少,特此记录一下. 比如说有一个字符串  "123@qq.comaaa@163.combbb@126.comasdf111@a ...

Python中正则匹配使用findall&comma;捕获分组&lpar;xxx&rpar;和非捕获分组&lpar;&quest;&colon;xxx&rpar;的差异

转自:https://blog.csdn.net/qq_42739440/article/details/81117919 下面是我在用findall匹配字符串时遇到的一个坑,分享出来供大家跳坑. 例 ...

python中正则匹配之re模块

Python中正则表达式 re:re是提供正则表达式匹配操作的模块 一.什么是正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某个模式匹配,Python 自1.5版本起 ...

JavaScript 中正则匹配时结果不一致的问题

创建示例项目 考察如下场景,我们有个输入框组件,输入时同时进行校验. interface IInputProps { label: string; } function Input({ label } ...

grep中正则匹配的使用

如要匹配Computer或computer两个单词,可做如下操作: [Cc]mputer “.”允许匹配ASCII集中任意字符,或为字母,或为数字. 使用\{\}匹配模式结果出现的次数 匹配字母A出现 ...

Java中正则匹配性能测试

工作中经常会用到在文本中每行检索某种pattern,刚才测试了三种方式,发现实际性能和预想的有区别 方式1: 直接字符串的matches方法,[string.matches("\\d+&qu ...

JS中正则匹配开头不带空格,结尾也不带空格的字符串

在做项目的时候,要求限制SSID的长度.以及开头和结尾不能是空格. var reg = /^\S.{0,30}\S$/ "$$$  $$".match(reg);   ==> ...

随机推荐

exp&lowbar;tools

#pwntools # github https://github.com/Gallopsled/pwntools 在线帮助文档 https://docs.pwntools.com/en/stable ...

POJ 1151 Atlantis(线段树-扫描线,矩形面积并)

题目链接:http://poj.org/problem?id=1151 题目大意:坐标轴上给你n个矩形, 问这n个矩形覆盖的面积 题目思路:矩形面积并. 代码如下: #include

HTTP权威指南阅读笔记五:Web服务器

Web服务器会做些什么: 1.建产连接:接受一个客户端连接,或者如果不希望与这个客户端建立连接,就将其关闭. 1)处理新连接 2)客户端主机名识别 3)通过ident确定客户端用户 ident在组织内 ...

十七、EnterpriseFrameWork框架核心类库之Web控制器

回 EFW框架源代码下载:http://pan.baidu.com/s/1qWJjo3U EFW框架中的WebContro ...

ExecutorService线程池讲解

ExecutorService 建立多线程的步骤: 1.定义线程类 class Handler implements Runnable{ } 2.建立ExecutorService线程池 Execut ...

c语言知识&lpar;找出大于2门成绩不及格的学生&rpar;

1.首先定义一个学生结构体(结构体中包含一个Score结构体): typedef struct score{ float chinese;//语文成绩 float english;//英语成绩 flo ...

HW5&period;16

public class Solution { public static void main(String[] args) { for(int i = 2000; i <= 2010; i++ ...

&lbrack;转载&rsqb;5分钟了解Mockito

原文链接: http://liuzhijun.iteye.com/blog/1512780/ 5分钟了解Mockito 博客分类: Open SourceJava 一.什么是mock测试,什么是moc ...

Oracle core03&lowbar;ACID

ACID特性 oracle如何使用undo和redo来保证了关系数据库的ACID特性. ACID的特性简单描述为: Atomic:以事务为单位的原子性 Consistency:保证数据一致性 Isol ...

02-windows 安装以太坊 ethereum 客户端 (win7-64)-大叔思维

以太坊(Ethereum)是一个运行智能合约的去中心化平台(Platform for Smart Contract),平台上的应用按程序设定运行,不存在停机.审查.欺诈.第三方人为干预的可能.以太坊平 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值