My_Project

资料整理


正则表达式

<p>1、正则表达式:是一个记录文本规则的代码,是一个特殊的字符序列,由普通字符和元组组成,其实就是对元组字符的学习。</p> <p>2、行定位符</p> <pre><code>^:行的开始 $:行的结尾 案例 ^ab 说明:要匹配的字符串ab的开始位置是行头,可以匹配:ab cdefg hijk ab$ 说明:要匹配的字符串ab的开始位置是行尾,可以匹配:cdefg hijk ab ab 说明:要匹配的字符串ab可以是任意位置,可以匹配:cdeab hijk ab ab shkhg ab</code></pre> <p>3、元字符</p> <pre><code>说明:字母都是小写的,括号在正则表达式中也算是一个元字符。 . 匹配除换行符以外的任意字符 \w 匹配字母、数字、下划线、汉字 \s 匹配任意的空格符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束</code></pre> <p>3、反义代码</p> <pre><code>说明:字母都是大写的,使用方法与“元字符”一样,意思相反。 . 匹配除换行符以外的任意字符 \W 匹配任意不是字母或数字或下划线或汉字的字符 \S 匹配任意不是空白符的字符 \D 匹配非数字 \B 匹配不是单词的开始或结束的位置 [^a] 匹配除了a以外的所有字符</code></pre> <p>4、限定符</p> <pre><code>? 匹配前面的字符0次或1次,举例:colou?r,表示可以匹配colour和color。 + 匹配前面的字符1次或多次,举例:go+gle,表示可以匹配的范围从gogle到goo...gle。 * 匹配前面的字符0次或多次,举例:go*gle,表示可以匹配的范围从ggle到goo...gle。 {n} 匹配前面的字符n次,举例:go{2}gle,表示只匹配google。 {n,} 匹配前面的字符最少n次,举例:go{2,}gle,表示可以匹配的范围从gogle到goo...gle。 {n,m} 匹配前面的字符最少n次最多m次,举例:employe{0,2},表示可以匹配employ和employe和employee这3种情况。 案例 匹配8位QQ号:^\d{8}$</code></pre> <p>5、字符类</p> <pre><code>说明 只需要在[]中列出要匹配的字符即可。 案例 [aeiou]说明:匹配任何一个元音字母。 [.?!]说明:匹配标点负号.或?或!。 [0-9]说明:匹配数字,等同于\d。 [a-z0-9A-Z]说明:匹配字母或数字。 [\u4e00-\u9fa5]说明:匹配任意一个汉字。 [\u4e00-\u9fa5]+说明:匹配连续多个汉字。</code></pre> <p>6、排除字符</p> <pre><code>^ 放在[]中表示排除的意思。 案例 [^a-zA-A] 说明:匹配一个不是字母的字符。</code></pre> <p>7、选择字符</p> <pre><code>| 说明:是选择字符,可以理解为"或"。 案例 匹配身份证号码:匹配15位数字、18位数字、或17位数字和最后一位(最后一位可以是数字、X、x) ^\d{15}$|(^\d{18}$)|(^\d{17}(\d|x|X))$</code></pre> <p>8、转义字符</p> <pre><code>\ 续行符,将字符串当中的具有特殊含义的字符的特殊含义取消掉。 \n 换行符。 \t 水平制表符,tab键、空格,用于横向跳到下一位制表位。 \0 空 \" 双引号 \' 单引号 \\ 一个反斜杠 \f 换页 \0dd 八进制数,dd表示字符,如\012代表换行 \xhh 十六进制数,hh表示字符,如\0a代表换行 案例 匹配例如127.0.0.1这样的IP [1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[1-9]{0,3}</code></pre> <p>9、分组</p> <pre><code>表达式 (one|two)th 说明:匹配单词one或two,不带括号表示one和twoth。</code></pre> <p>10、正则表达式语法</p> <pre><code>说明 由于模式字符串中可能存在包括大量的特殊字符和反斜杠,所以需要写为原生字符串,即模式字符串前加r或R。 模式字符串 匹配不是字母的一个字符 [^a-zA-Z] 匹配以字母m开头的字符 \\bm\\w*\\b 原生字符串 匹配以字母m开头的字符 r'\bm\w*\b'</code></pre> <p>11、使用re实现正则表达式操作</p> <p>11.1、匹配字符串</p> <p>(1)使用match()方法进行匹配</p> <pre><code>说明 用于从字符串的开始处进行匹配,如果在起始位置匹配成功,则返回Match对象,否则返回None。 语法格式 re.match(pattern,string,[flags]) 参数说明: pattern:模式字符串,由要匹配的正则表达式转换而来。 string:要匹配的字符串。 flags:可选参数,表示标志位,用于控制匹配方式,常用标志如下。 案例 匹配第一个以"mr_"开头的字符串,不区分大小写。 import re pattern = r'mr_\w+' 模式字符串 string = 'MR_SHOP mr_shop' 要匹配的字符串 match = re.match(pattern,string,re.I) 匹配字符串,不区分大小写 print('匹配值的起始位置:',match.start()) 0 print('匹配值的结束位置:',match.end()) 7 print('匹配位置的元组:',match.span()) (0,7) print('要匹配的字符串:',match.string()) MR_SHOP mr_shop print('匹配数据:',match.group()) MR_SHOP string = '项目名称 MR_SHOP mr_shop' match = re.match(pattern,string,re.I) print(match) 输出: &lt;re.Match object; span=(0, 7), match='MR_SHOP'&gt; None</code></pre> <p>(2)使用search()方法进行匹配</p> <pre><code>说明 只匹配第1个,用于在整个字符串中搜索第一个匹配的值,如果在起始位置匹配成功,则返回Match对象,否则返回None。 注:search()方法不仅在字符串的起始位置搜索,其他位置有符合的匹配也可以。 语法格式 re.search(pattern,string,[flags]) 参数说明: pattern:模式字符串,由要匹配的正则表达式转换而来。 string:要匹配的字符串。 flags:可选参数,表示标志位,用于控制匹配方式,常用标志如下。 案例 匹配第一个以"mr_"开头的字符串,不区分大小写 import re pattern = r'mr_\w+' string = 'MR_SHOP mr_shop' match = re.search(pattern,string,re.I) print(match) string = '项目名称 MR_SHOP mr_shop' match = re.search(pattern,string,re.I) print(match) 输出: &lt;re.Match object; span=(0, 7), match='MR_SHOP'&gt; &lt;re.Match object; span=(5, 12), match='MR_SHOP'&gt;</code></pre> <p>(3)使用findall()方法进行匹配</p> <pre><code>说明 匹配所有,用于在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回。 如果匹配成功则返回包含匹配结构的列表,否则返回空列表。 语法格式: re.findall(pattern,string,[flags]) 参数说明: pattern:模式字符串,由要匹配的正则表达式转换而来。 string:要匹配的字符串。 flags:可选参数,表示标志位,用于控制匹配方式,常用标志如下。 案例 匹配搜索以"mr_"开头的字符串 import re pattern = r'mr_\w+' string = 'MR_SHOP mr_shop' match = re.findall(pattern,string,re.I) print(match) string = '项目名称 MR_SHOP mr_shop' match = re.findall(pattern,string,re.I) print(match) 输出: ['MR_SHOP', 'mr_shop'] ['MR_SHOP', 'mr_shop'] 案例 如果在指定的模式字符串中包含分组,则返回与分组匹配的文本列表。 import re pattern = r'([1-9]{1,3}(\.[0-9]{1.3}){3})' str1 = '127.0.0.1 192.168.1.66' match = re.findall(pattern,str1) for i in match: print(i[0]) 输出: 127.0.0.1 192.168.1.66 常用标志 A或ASCII 对\w、\W、\b、\B、\d、\D、\s、\S只进行ASCII匹配(仅适用于python3) I或IGNORECASE 执行不区分字母大小写的匹配 M或MULTILNE 将^和$用于包括整个字符串的开始和结尾的每一行(默认情况下,仅适用于整个字符串的开始和结尾处) S或DOTALL 使用"."字符匹配所有字符,包括换行符 X或VERBOSE 忽略模式字符串中未转义的空格和注释</code></pre> <p>11.2、替换字符串</p> <pre><code>说明 sub(方法用于实现字符串的替换) 语法格式 re.sub(pattern,repl,string,count,flags) 参数说明: pattern:模式字符串,有=由要匹配的正则表达式转换而来。 repl:替换的字符串。 string:要被查找替换的原始字符串。 count:可选参数,表示模式匹配后替换的最大次数,默认值为0,表示替换所有匹配。 flags:可选参数,表示标志位,用于控制匹配方式,常用标志如下。 案例 隐藏中奖信息中的手机号。 import re pattern = r'1[34578]\d{9}' string = '中奖号码为:84978881 联系电话为:13611111111' result = re.sub(pattern,'1xxxxxxxxxx',string) print(result) 输出: 中奖号码为:84978881 联系电话为:1xxxxxxxxxx</code></pre> <p>11.3、使用正则表达式分割字符串</p> <pre><code>说明 split()方法用于实现字符串的分割,并以列表的形式返回。 语法格式 re.split(pattern,string,[maxsplit],[flags]) 参数说明: pattern:模式字符串,由要匹配的正则表达式转换而来。 string:要匹配的字符串。 maxsplit:可选参数,最大的拆分次数。 flags:可选参数,表示标志位,用于控制匹配方式,常用标志如下。 案例 从给定的URL中提取出请求地址和哥哥参数 import re pattern = r'[?|&amp;]' 定义分隔符 url = 'http://www.mingrisoft.com/login.jsp?username="mr"&amp;pwd="mrsoft"' result = re.split(pattern,url) print(result) 输出: ['http://www.mingrisoft.com/login.jsp', 'username="mr"', 'pwd="mrsoft"']</code></pre>

页面列表

ITEM_HTML