北京随喜设计网站,邮件服务器是不是网站服务器,南昌做任务的网站,做购物网站 营业范围是什么数据解析-正则表达式
在前面我们已经搞定了怎样获取页面的内容#xff0c;不过还差一步#xff0c;这么多杂乱的代码夹杂文字我们怎样
把它提取出来整理呢#xff1f;下面就开始介绍一个十分强大的工具#xff0c;正则表达式#xff01; 正则表达式是对字符串操作的一种…数据解析-正则表达式
在前面我们已经搞定了怎样获取页面的内容不过还差一步这么多杂乱的代码夹杂文字我们怎样
把它提取出来整理呢下面就开始介绍一个十分强大的工具正则表达式 正则表达式是对字符串操作的一种逻辑公式就是用事先定义好的一些特定字符、及这些特定字符的组合组成一个“规则字符串”这个“规则字符串”用来表达对字符串的一种过滤逻辑。 正则表达式是用来匹配字符串非常强大的工具在其他编程语言中同样有正则表达式的概念
Python同样不例外利用了正则表达式我们想要从返回的页面内容提取出我们想要的内容就易如
反掌了。 规则
定位符
字 符描 述^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline属 性^ 还会与 \n 或 \r之后的位置匹配。 $匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性$ 还会与 \n 或 \r之前的位置匹配。\b匹配一个单词边界即字与空格间的位置。\B非单词边界匹配。 注意 不能将限定符与定位符一起使用 普通字符 字符描述[ABC]匹配 [...] 中的所有字符例如 [aeiou] 匹配字符串 google runoob taobao 中所有的e o u a 字母[^ABC]匹配除了 [...] 中字符的所有字符例如 [^aeiou] 匹配字符串 google runoob taobao中除了 e o u a 字母的所有字母[A-Z][A-Z] 表示一个区间匹配所有大写字母[a-z] 表示所有小写字母.匹配除换行符\n、\r之外的任何单个字符相等于 [^\n\r][\s\S] 匹配所有。\s 是匹配所有空白符包括换行\S 非空白符不包括换行\w 匹配字母、数字、下划线。等价于 [A-Za-z0-9_] 特 殊字符
特 别 字 符描 述( )标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符请使用 ( 和 )。[标记一个中括号表达式的开始。要匹配 [请使用 \[ 。? 匹配前面的子表达式零次或一次或指明一个非贪婪限定符。要匹配 ? 字符请使用 \?。\将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如 n匹配字符 n。\n 匹配换行符。序列 \ 匹配 而 ( 则匹配 (。{ 标记限定符表达式的开始。要匹配 {请使用 \{ 。|指明两项之间的一个选择。要匹配 |请使用 \| 。 非打印字符
字 符描 述\cx匹配由x指明的控制字符。例如 \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或a-z 之一。否则将 c 视为一个原义的 c 字符。\f 匹配一个换页符。等价于 \x0c 和 \cL\n匹配一个换行符。等价于 \x0a 和 \cJ。\r匹配一个回车符。等价于 \x0d 和 \cM\s匹配任何空白字符包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode正则表达式会匹配全角空格符。\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]\t匹配一个制表符。等价于 \x09 和 \cI\v匹配一个垂直制表符。等价于 \x0b 和 \cK 限定符
字 符描 述*匹配前面的子表达式零次或多次。例如zo* 能匹配 z 以及 zoo。* 等价于{0,}。匹配前面的子表达式一次或多次。例如zo 能匹配 zo 以及 zoo但不能匹配z。 等价于 {1,}。?匹配前面的子表达式零次或一次。例如do(es)? 可以匹配 do 、 does 中的 does、 doxy 中的 do 。? 等价于 {0,1}。{n}n 是一个非负整数。匹配确定的 n 次。例如o{2} 不能匹配 Bob 中的 o但是能匹配 food 中的两个 o。{n,}n 是一个非负整数。至少匹配n 次。例如o{2,} 不能匹配 Bob 中的 o但能匹配 foooood 中的所有 o。o{1,} 等价于 o。o{0,} 则等价于 o*。{n,m}m 和 n 均为非负整数其中n m。最少匹配 n 次且最多匹配 m 次。例如o{1,3}将匹配 fooooood 中的前三个 o。o{0,1} 等价于 o?。请注意在逗号和两个数之间不能有空格。 数量词的贪婪模式与非贪婪模式
正则表达式通常用于在文本中查找匹配的字符串
Python里数量词默认是贪婪的在少数语言里也可能是默认非贪婪总是尝试匹配尽可能多的字
符
非贪婪的则相反总是尝试匹配尽可能少的字符
例如正则表达式”ab”如果用于查找”abbbc”将找到”abbb”。而如果使用非贪婪的数量词”ab?”
将找到”a” 正则表达式修饰符 - 可选标志 正则表达式可以包含一些可选标志修饰符来控制匹配的模式。 修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志 修 饰 符描 述re.I 使匹配对大小写不敏感re.L 做本地化识别locale-aware匹配re.M使边界字符 ^ 和 $ 匹配每一行的开头和结尾记住是多行而不是整个字符串的开头和结尾re.S 使 . 匹配包括换行在内的所有字符re.U根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \Bre.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解 正则表达式在线测试 | 菜鸟工具 (runoob.com)https://c.runoob.com/front-end/854/ Python使用正则
常用方法
re.match(pattern, string, flags0) re.match 尝试从字符串的起始位置匹配一个模式如果不是起始位置匹配成功的话match() 就返回none
re.search(pattern, string, flags0) re.search 扫描整个字符串并返回第一个成功的匹配。
re.findall(pattern,string,flags0) re.findall 查找全部
re.sub(pattern,replace,string) re.sub 替换字符串
import restr I study python3.10 every_day
print(----------------------match(规则,内容)-
----------------------------) # 从头开始匹配
如果匹配上了返回值如果匹配不上返回none
m1 re.match(I,str)
m2 re.match(\w,str)
m3 re.match(\S,str)
m4 re.match(\D,str)
m5 re.match(I (study),str)
m6 re.match(\w\s(\w*),str)
print(m6.group(1))print(----------------------search(规则,内
容)-----------------------------) # 从任意位
置开始匹配如果匹配上了返回值如果匹配不上返回
none
s1 re.search(I,str)
s2 re.search(study,str)
s3 re.search(p\w,str)
s4 re.search(p\w.\d,str)
print(s4.group())print(----------------------findall(规则,内
容)-----------------------------) # 从任意位
置开始匹配返回所有匹配的数据如果没有匹配内容返
回一个空列表
f1 re.findall(ddy,str)
print(f1)print(----------------------sub(规则,替换的内
容,内容)-----------------------------) # 替换
原来的数据并返回一个新的字符串不会修改原来的字符
串
print(re.sub(p\w,Python,str))
print(str)print(----------------------test()---------
--------------------)
info htmldiva
hrefhttp://www.itbaizhan.cn百战程序员/a
/div/html
tf re.findall(a href(.),info)
tf2 re.findall(a href.(.)
/a,info)
print(tf2)