1.让点可以匹配所有字符包括换行符
reg=re.compile(r'(?<= id=\"content\">).*?(?=</div>)', re.S)
text=re.findall(reg,html )
2. 精确匹配和最小匹配
‘{m}’ 精确匹配m次
‘{m,n}’ 匹配最少m次,最多n次。(n>m)
如果你只想指定一个最少次数或只指定一个最多次数,你可以把另外一个参数空起来。比如你想指定最少3次,可以写成 {3,} (注意那个逗号),同样如果只想指定最大为5次,可以写成{,5},也可以写成{0,5}。
3.‘*?’ ‘+?’ ‘??’ 最小匹配
‘*’ ‘+’ ‘?’:0/多;1/多;0/1
4. 1 前向界定与后向界定
(?<=…) 前向界定 (?=…) 后向界定:参数字符串必须定大小>>> s=r'/*djwehfunj*/'
>>> re.findall( r’(?<=/\*).+?(?=\*/)’ , s ) #'djwehfunj'
例:在下面的字符串中想找到被字母夹在中间的数字,你不可以用前向界定:
>>> s = ‘aaa111aaa , bbb222 , 333ccc ‘
>>> re.findall( r’(?<=[a-z]+)\d+(?=[a-z]+)' , s ) # ERROR错误信息:error: look-behind requires fixed-width pattern
不过如果你只要找出后面接着有字母的数字,你可以在后向界定写正则式:
>>> re.findall( r’\d+(?=[a-z]+)’, s ) #['111', '333']
如果你一定要匹配包夹在字母中间的数字,你可以使用组(group)的方式
>>> re.findall (r'[a-z]+(\d+)[a-z]+' , s ) #['111']
4.2前向非界定和后向非界定
(?<!...) 前向非界定 #只有当你希望的字符串前面不是’…’的内容时才匹配(?!...) 后向非界定 #只有当你希望的字符串后面不跟着’…’内容时才匹配。
匹配后面不跟着字母的数字
>>> re.findall( r’\d+(?!\w+)’ , s ) #['222']
>>> re.findall( r’\d+(?![a-z]+)’ , s ) #['11', '222', '33']