注意<h2></h3>不是一对,不想要这两个标签之间的
(?=<\2>)表示之前出现的第二个子表达式,
有点小事。留个尾巴
八面威风杀气飘,勤王保驾显功劳。
(?<= <h1>).+(?=<h1>)
表示匹配字符串,前面为<h1>后面为<h1>,最终只显示中间的部分。
子表达式
ex:
改进版:(+ 换成{ } 方便控制位数)
再改版:
将127. 或0. 整体当作一个字符进行匹配,对这些规定重复匹配的次数
即()内的内容被当作一个字符了,元字符可以对其使用。
注意,子表达式使用时不能用findall方法
ex:
解决方法:
1.
2.
?: 非捕获组
()默认为捕获组,即找到一个匹配的立即返回。
+表示重复1次或多次,
*表示重复0次,1次,或多次,
{1,2}表示重复1次或2次。
ex:
{1,}代表至少重复1次
ex:
{2,}至少匹配2次
{,2}至多匹配2次
其他元字符:
理想的情况应该是@imooc.
但是正则表达式之中,存在贪婪机制,所以默认匹配到了最后一个 . 的位置
懒惰:
在+之后加上一个? 这样就把贪婪的+ 转变为了懒惰的+,匹配到第一个.
就结束了。
ex:
r"[^x]ap"
代表除了以x开头的,以ap结尾的所有元素。
简洁正则表达式(都是相当于对复杂【】的简单表达):
注意 \ 可以把特殊字符变为普通字符,也可以把普通字符变为特殊字符。
ex:
【】是一种元字符,表示匹配内部的任意字符,或子表达式。
ex 中表示无论Pp都可以被匹配到。
. 是一个元字符,可以代表任意一个字符,包括他自己,\. 为转义字符,只能表示 .
ex:
findall方法表示返回多个可以被匹配的元素,形成一个列表
ex:
+ 表示将前面的子表达式,字符重复一边或多边,
r"<h1>.+<h1>"
表示在h1标签中间的任意所有元素均可以被匹配。
* 表示将前面的子表达式,字符重复0遍,一边,或多边(与+类似)
ex:
正则表达式:
为了解决特定问题的一种工具。
应用场景:
元字符[]:匹配内部的任意字符;[pP]ython
匹配中间:.+
元字符 . :代表任意字符
元字符+ :前面一个字符或子表达式重复一遍或多遍
ab+ :一个a或若干个b,多了不限,少了不行
记录一下学习笔记
前瞻、后顾、负前瞻、负后顾
{x,y}重复次数
加上?变成懒惰
[0-9] [\d] 0123456789任意之一
[^0-9] [\D] 匹配非数字
[a-z] 小写字母任意之一
[A-Z]大写字母任意之一
[\w] [a-z0-9A-Z] 匹配大小写字母、数字和下划线
[\W] 等同于[^a-z0-9A-Z] 匹配非大小写字母、数字和下划线
正则表达式的用途:搜索和替换。