python基础-正则常用基础语法和re模块

133 阅读2分钟

元字符

  1. . 点匹配换行符意外的任意字符,re.S 可以让正则中的.匹配换行符
  2. \w 匹配字母或数字或下划线
  3. \s 匹配任意的空白符
  4. \d 匹配数字
  5. \n 匹配一个换行符
  6. \t 匹配一个制表符
  7. ^ 匹配字符串的开始
  8. $ 匹配字符串的结尾
  9. \W 匹配非字母或数字或下划线
  10. \D 匹配非数字
  11. \S 匹配非空白符
  12. a|b 匹配字符a或者字符b
  13. () 匹配括号内的表达式,也表示一个组
  14. [...] 匹配字符组中的字符
  15. [^...] 匹配除了字符组中字符的所有字符

量词

控制元字符出现的次数

  1. * 出现0次或多次
  2. + 出现一次或多次
  3. ? 出现0次或一次
  4. {n} 出现n次
  5. {n,} 出现大于等于n次
  6. {n,m} 出现n到m次

贪婪匹配和惰性匹配

  1. .* 贪婪匹配(尽可能远的匹配),re.S可以让正则中的.匹配换行符
  2. .*? 惰性匹配(尽可能近的匹配,匹配过程是先匹配最远,然后往回缩找最近的匹配,这个过程叫“回溯”),re.S可以让正则中的.匹配换行符

demo

内容

玩儿吃鸡游戏,晚上一起打游戏,干嘛呢?打游戏啊

贪婪匹配

玩儿.*游戏,尽可能远的匹配,结果为:玩儿吃鸡游戏,晚上一起打游戏,干嘛呢?打游戏

惰性匹配

玩儿.*?游戏,尽可能近的匹配,结果为:玩儿吃鸡游戏

re模块

import re

result = re.findall(r'\d+', 'this is 1 and 123')
print(result)  # ['1', '123']

result = re.finditer(r'\d+', 'this is 1 and 123')  # 重要
for item in result:  # 从迭代器中获取内容
    print(item.group())  # 从匹配到的结果中拿到数据

# search只会匹配到第一次匹配的内容
result = re.search(r'\d+', 'this is 1 and 23')
print(result.group())  # 1

# 预加载,提前把正则对象加载完毕,提高性能,节省内存
re_compile = re.compile(r'\d+')
search = re_compile.search('this is 123')
print(search.group())  # 123

# 提取分组数据并单独起名,(?P<名字>正则),提取数据使用:item.group('名字')
s = """
<div class='西游记'><span id='10010'>中国联通</span></div>
<div class='西游记'><span id='10086'>中国移动</span></div>
"""

# re.S 可以让正则中的.匹配换行符
obj = re.compile(r"<span id='(?P<id>\d+)'>(?P<name>.*?)</span>", re.S)
result = obj.finditer(s)
for item in result:
    print(item.group('id'))
    print(item.group('name'))