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,捕获分组(xxx)和非捕获分组(?:xxx)的差异
转自: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_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语言知识(找出大于2门成绩不及格的学生)
1.首先定义一个学生结构体(结构体中包含一个Score结构体): typedef struct score{ float chinese;//语文成绩 float english;//英语成绩 flo ...
HW5.16
public class Solution { public static void main(String[] args) { for(int i = 2000; i <= 2010; i++ ...
[转载]5分钟了解Mockito
原文链接: http://liuzhijun.iteye.com/blog/1512780/ 5分钟了解Mockito 博客分类: Open SourceJava 一.什么是mock测试,什么是moc ...
Oracle core03_ACID
ACID特性 oracle如何使用undo和redo来保证了关系数据库的ACID特性. ACID的特性简单描述为: Atomic:以事务为单位的原子性 Consistency:保证数据一致性 Isol ...
02-windows 安装以太坊 ethereum 客户端 (win7-64)-大叔思维
以太坊(Ethereum)是一个运行智能合约的去中心化平台(Platform for Smart Contract),平台上的应用按程序设定运行,不存在停机.审查.欺诈.第三方人为干预的可能.以太坊平 ...