python正则表达式简介(2)

目录

  • 贪婪与非贪婪模式
  • re模块常用方法
  • 分组功能
  • csv模块


贪婪与非贪婪模式

在重复匹配时,正则表达式默认总是尽可能多的匹配,这被称为贪婪模式。例如,针对文本dxxxdxxxd,表达式(d)(\w+)(d)中的\w+将匹配第一个d和最后一个d之间的所有字符xxxdxxx。可见,\w+在匹配的时候,总是尽可能多的匹配符合它规则的字符。同理,带有?、*和{m,n}的重复匹配表达式都是尽可能地多匹配。

校验数字的相关表达式:
python正则表达式简介(2)_第1张图片
特殊场景的表达式:
python正则表达式简介(2)_第2张图片

re模块常用方法

python正则表达式简介(2)_第3张图片
compile⽅法是re模块的工厂法,⽤于将字符串形式的正则表达式编译为Pattern模式对象,可以实现更加效率的匹配。第二个参数flag是匹配模式 使用compile()完成一次转换后,再次使用该匹配模式的时候就不能进行转换了。经过compile()转换的正则表达式对象也能使用普通的re⽅法。
flag匹配模式:
python正则表达式简介(2)_第4张图片

  • search(pattern, string, flags=0)
    在文本内查找,返回第一个匹配到的字符串。它的返回值类型和使用方法与match()是一样的,唯一的区别就是查找的位置不用固定在文本的开头
  • findall(pattern, string, flags=0)
    作为re模块的三大搜索函数之一,findall()和match()、search()的不同之处在于,前两者都是单值匹配,找到一个就忽略后面,直接返回不再查找了。而findall是全文查找,它的返回值是一个匹配到的字符串的列表。这个列表没有group()方法,没有start、end、span,更不是一个匹配对象,仅仅是个列表!如果一项都没有匹配到那么返回一个空列表
  • split(pattern, string, maxsplit=0, flags=0)
    re模块的split()方法和字符串的split()方法很相似,都是利用特定的字符去分割字符串。但是re模块的split()可以使用正则表达式,因此更灵活,更强大
    split有个参数maxsplit,用于指定分割的次数
  • sub(pattern, repl, string, count=0, flags=0)
    sub()方法类似字符串的replace()方法,用指定的内容替换匹配到的字符,可以指定替换次数

分组功能

Python的re模块有一个分组功能。所谓的分组就是去已经匹配到的内容再筛选出需要的内容,相当于二次过滤。实现分组靠圆括号(),而获取分组的内容靠的是group()、groups(),其实前面我们已经展示过。re模块里的积个重要方法在分组上,有不同的表现形式,需要区别对待

csv模块

# 文件的写入
import csv

titles = ('n', 'age', 'height')
persons = [{
     'n': 'a', 'age': 30, 'height': 181},
           {
     'n': 'b', 'age': 33, 'height': 185},
           {
     'n': 'c', 'age': 18, 'height': 190}]
with open('persons.csv', 'w', encoding='utf-8', newline='') as file_obj:
    writer = csv.DictWriter(file_obj, titles)
    writer.writeheader()
    writer.writerows(persons)

# 读取数据
with open('persons.csv', 'r', encoding='utf-8') as file_obj:
    reader = csv.reader(file_obj)
    for x in reader:
        print(x[0])

with open('persons.csv', 'r', encoding='utf-8') as file_obj:
    reader = csv.DictReader(file_obj)
    for x in reader:
        print(x['n'])

你可能感兴趣的:(python正则表达式简介(2))