1.[^A]
/^A/会匹配"An e"中的A,但是不会匹配"ab A"中的A,此时^A的意思是“匹配开头的A”
/[^a-z\s]/会匹配"my 3 sisters"中的"3 ",此时^的意思是“非”,类似的有
[^a]表示“匹配除了a的任意字符”。
[^a-zA-Z0-9]表示“找到一个非字母也非数字的字符”。
”^”这个字符在中括号”[]”中被使用的话就表示字符类的否定,
如果不是的话就是表示限定开头。我这里说的是直接在”[ ]”中使用,不包括嵌套使用。
其实也就是说”[ ]”代表的是一个字符集,”^”只有在字符集中才是反向字符集的意思。
ta = re.sub(r"<[^>]*>| ", "", """<div class="job-detail"><dadadalihia> <p>【岗位职责】</p>""") print(ta)
#在代码中 存在多个<>,
findall 分不清<div class="job-detail"><dadadalihia><p>【岗位职责】</p>
第一个<与最后一个>对应,还是与其中之间的一个对应,故采用<[^>]*>或者<[^<]*>
是因为,在<>中当遇到第一个<或者>,不取这个尖括号,就匹配到第一个对象。以此类推
2.re.S
a="hellojkhjhkkjjhjkh55\nksksworld" print(re.findall(r"hello.*world",a,re.S))
在字符串中,包含换行符\n,在这种情况下:
如果不使用re.S参数,则只在每一行内进行匹配,如果一行没有,就换下一行重新开始。
而使用re.S参数以后,正则表达式会将这个字符串作为一个整体,在整体中进行匹配。
3.()组
name = ["_name@163.com", "n5am@163.com", "name1@1636com", "1HH|||H", "name1@126.com"] for i in name: w = re.match(r"(^[a-zA-Z_][a-zA-Z0-9_]{3,19})@(163|126)\.com$", i) if w: print(w.group(1), w.group(2)) else: print("0")
1.w = re.match(r"(^[a-zA-Z_][a-zA-Z0-9_]{3,19})@(163|126)\.com$",i) 中的两对小括号,是两个组,分别可用w.group(1), w.group(2) 取出()中统计的对象
2.re.match(r"<(\w*)>.*</\1>", WY) 可用\1 代替第一个小括号里的对象
3.在findall方法中,print 只输出小括号里匹配的字符串,所以在取字符串时,可以给想要的字符串添加小括号。
4.re.sub
re.sub(r"需匹配字符串","替代字符串","目标字符串")
也可以在"替代字符串"添加方法,对目标字符串进行修改,但要注意变量格式的变化。
def ake(temp): num = temp.group() num = int(num) + 10 return str(num) ret2 = re.sub(r"\d+", ake, "liuhuanyu:1111,lkoakoi2222") print(ret2)
小知识,在findall 与sub方法中,不需要group来返回 findall返回一个列表,sub返回修改后的字符串