1、正则表达式
参考文档:Python 正则表达式(RegEx)
2、使用正则表达式提取替换字符串
参考文档:Python 正则表达式分组匹配提取替换字符串(回调函数)
3、re.sub(pattern, repl, string, count=0, flags=0)
Python中实现正则表达式提取替换,需要使用re.sub()
,具体参数说明如下:
1)pattern参数
pattern是正则表达式字符串。字符串前一般加r。
参考文档:Python 字符串前r、b、u和f的前缀作用及用法
2)repl参数
repl是被替换成的内容,可以是字符串,也可以是函数。字符串匹配后直接替换,函数则会每次匹配的字符串会调用执行进行处理。
3)string参数
string表示要被处理,要被替换的字符串。
4)count参数
count是匹配替换的次数
5)flags参数
IGNORECASE
(简写I),匹配对大小写不敏感。
LOCALE
(简写L),locales是C语言库中的一项功能,是用来为需要考虑不同区域语言的编程提供帮助的。
MULTILINE
(简写M),^
匹配字符串的开始和字符串中每行的开始。同样的, $
元字符匹配字符串结尾和字符串中每行的结尾。
DOTALL
(简写S),此模式下.
的匹配不受限制,可匹配任何字符,包括换行符,但默认是不能匹配换行符。
VERBOSE
(简写X),冗余模式, 此模式忽略正则表达式中的空白和#
号的注释。
4、使用正则表达式提取替换img(src)或a(href)标签的url
使用正则表达式提取替换html中标签的url代码示例,如下,
# -*- coding: utf-8 -*- import re def replace_num(str): print("--------------") print(str.group()) print(str.group(1))#匹配到的第1个分组 #print(str.group(2))#匹配到的第2个分组 print("--------------") return "" my_str = '''<p><strong>1、JDK11安装</strong></p><p>1) <span class=\"text-info\">下载JDK11</span></p><p >Oracle JDK11: <a href=\"https://www.example.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html\" rel=\"nofollow\">https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html</a></p><p>OpenJDK11: <a href=\"https://www.example.com/11/\" rel=\"nofollow\">http://jdk.java.net/11/</a></p><p>在上面两个地址下载需要的版本。 </p><p>本文主要是64位win10上安装,文件下载地址:<a href=\"https://download.java.net/openjdk/jdk11/ri/openjdk-11+28_windows-x64_bin.zip\" rel=\"nofollow\">https://download.java.net/openjdk/jdk11/ri/openjdk-11+28_windows-x64_bin.zip</a></p><p>2) <span class=\"text-info\">解压下载文件</span></p><p>将下载好的.zip文件解压到指定的安装目录,例如,安装到C:\\Program Files\\Java下,在Java文件夹下新建jdk11文件夹,将文件解压到jdk11文件夹下。 </p><p><span class=\"text-warning\">注意:zip文件解压后,JDK中bin文件夹应该在jdk11文件夹下。</span></p> <p>如果下载的是exe文件,就选择安装目录为新建好的那个JDK11文件夹下。</p><p><strong>2、配置环境变量</strong></p> p>1)<span class=\"text-info\">配置JAVA_HOME</span></p> <p>按Windows键+R键,出现运行窗口,在打开文件框中输入sysdm.cpl,点击确定,出现\"系统信息\"窗口。</p><p>在系统信息窗口依次点击,</p> <p><span class=\"text-primary\">系统信息窗口 =》高级 =》环境变量-》系统环境变量</span> , 注意:如果用户环境变量中有对应的环境变量设置,就在用户环境变量中添加。否则会优先读取用户环境,有可能找不到设置的环境变量。如果没有,在系统环境变量或用户环境哪一个都可以,系统环境变量是对所有用户生效的。</p> <p><span class=\"text-primary\">点击环境变量->新建->变量名JAVA_HOME,变量值JDK11的安装目录如C:\\Program Files\\Java\\jdk11 </span></p> <p><span class=\"text-primary\"><img alt=\"JAVA_HOME\" src=\"http://file.example.xyz/source/download?id=5bd1926bdc72d91ff8d53a12\"><br></span></p><p>2)<span class=\"text-info\">配置Path环境变量</span></p> <p>编辑Path变量</p><p>把<br><span class=\"text-warning\">%JAVA_HOME%\\bin;<br></span>这个变量插入最前面,注意要有分号和后面的变量间隔开。 </p><p>注意:如果是win10系统,点击编辑后,要点击新建,值为<span class=\"text-warning\">%JAVA_HOME%\\bin</span>,win10系统中不用自己加冒包。</p><p></p><p></p><p><img alt=\"httpfileaionlifexyzsourcedownloadid5bd1bcd1dc72d91ff8d53a14\" src=\"http://file.example.xyz/source/download?id=5bd1bcd1dc72d91ff8d53a14\"></p><p></p> <p>效果如下图,</p><p><img alt=\"Path\" src=\"http://file.example.xyz/source/download?id=5bd19298dc72d91ff8d53a13\" ><br></p> <p>3)<span class=\"text-info\">验证是否安装成功</span></p> <p><span class=\"text-primary\">按windows键+R键</span>,输入cmd,在打开的cmd窗口中输入<span class=\"text-info\">java -version</span>,安装成功提示如下:</p> <pre class=\"prettyprint linenums\">Microsoft Windows [版本 10.0.17134.254]<br>(c) 2018 Microsoft Corporation。保留所有权利。<br>C:\\Users\\Administrator>java -version<br>java version \"11.0.1\" 2018-10-16 LTS<br>Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)<br>Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)</pre> ''' #a = re.sub(r'<pre class=\"prettyprint linenums\s*([a-z]*?)\"\s*>(.+?)</pre>', replace_num, my_str,flags=re.I|re.M|re.S) img = re.sub(r'<img\s*alt=\".*?\"\s*src=\"(.*?)\"\s*?>', replace_num, my_str,flags=re.I|re.M|re.S) #a = re.sub(r'<a\s*href=\"https://www.example.com/(.*?)\"\s*rel=\"nofollow\"\s*?>', replace_num, my_str,flags=re.I|re.M|re.S) a = re.sub(r'<a\s*href=\"(.*?)\"\s*rel=\"nofollow\"\s*?>', replace_num, my_str,flags=re.I|re.M|re.S) print(img) print(a) #每次匹配一个数字,执行函数,获取替换后的值