正则表达式

Posted on 2020-04-08 21:25  两只小白菜一只小鸡  阅读(143)  评论(0)    收藏  举报

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"<[^>]*>|&nbsp;", "", """<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返回修改后的字符串

 

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3