My_Project

资料整理


Python正则表达式

<p>正则表达式是一个记录文本规则的代码,是一个特殊的字符序列,由普通字符和元组组成,其实就是对元组字符的学习。</p> <p>1、行定位符</p> <pre><code>^ 行的开始。 $ 行的结尾。 案例 ^ab 说明:要匹配的字符串ab的开始位置是行头,可以匹配:ab cdefg hijk ab$ 说明:要匹配的字符串ab的开始位置是行尾,可以匹配:cdefg hijk ab ab 说明:要匹配的字符串ab可以是任意位置,可以匹配:cdeab hijk ab ab shkhg ab</code></pre> <p>2、元字符</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>案例:匹配8位QQ号 ^\d{8}$ ? 匹配前面的字符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种情况。</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。 10.1、模式字符串 (1)匹配不是字母的一个字符 [^a-zA-Z] (2)匹配以字母m开头的字符 \\bm\\w*\\b 10.2、原生字符串 (1)匹配以字母m开头的字符 r'\bm\w*\b'</code></pre> <p>11、使用re实现正则表达式操作</p> <p>11.1、匹配字符串</p> <pre><code>(1)使用match()方法进行匹配 说明 用于从字符串的开始处进行匹配,如果在起始位置匹配成功,则返回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 (2)使用search()方法进行匹配 说明 只匹配第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) 输出: &lt;re.Match object; span=(0, 7), match='MR_SHOP'&gt; string = '项目名称 MR_SHOP mr_shop' match = re.search(pattern,string,re.I) print(match) 输出: &lt;re.Match object; span=(5, 12), match='MR_SHOP'&gt; (3)使用findall()方法进行匹配 说明 匹配所有,用于在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回。 如果匹配成功则返回包含匹配结构的列表,否则返回空列表。 语法格式 re.findall(pattern,string,[flags]) 参数说明: pattern:模式字符串,由要匹配的正则表达式转换而来. string:要匹配的字符串。 flags:可选参数,表示标志位,用于控制匹配方式,常用标志如下。 案例1 匹配搜索以"mr_"开头的字符串。 import re pattern = r'mr_\w+' string = 'MR_SHOP mr_shop' match = re.findall(pattern,string,re.I) print(match) 输出: ['MR_SHOP', 'mr_shop'] string = '项目名称 MR_SHOP mr_shop' match = re.findall(pattern,string,re.I) print(match) 输出: ['MR_SHOP', 'mr_shop'] 案例2 如果在指定的模式字符串中包含分组,则返回与分组匹配的文本列表。 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 (4)常用标志 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