python re 匹配多行_python 正则入门学习

基本语法

通配符

ba2035cdb7a9ae013e8efcf76b619122.png

反义

d1e8096a897265e5dadf37d90011bed6.png

重复

6fa91ec5b25286f605020e1c6ef89748.png

贪心和非贪心

f0cdba3ae65b48791bfd5068f3284a4d.png

python正则表达式

re 模块包含了9个常量、12个函数、1个异常,介绍一下常用的常量和函数。,当然要导入这个模块,

import re

re模块常量

  • IGNORECASE

语法: re.IGNORECASE 或者简写 RE.I

作用:进行忽略大写匹配

# 大小写
def regexFlag():
    """演示re.I的使用"""
    text = "adfac"
    pattern = r"ADFAC"
    print(f"默认模式:{re.findall(pattern, text)}")
    print(f"忽略大小写 模式:{re.findall(pattern, text, re.I)}")

regexFlag()
默认模式:[]
忽略大小写 模式:['adfac']
  • ASCII

语法: re.ASCII 或简写为 re.A

作用: 顾名思义,ASCII表示ASCII码的意思,让 w, W, b, B, d, D, s 和 S 只匹配ASCII,而不是Unicode

# ASCII
def regexFlag():
    """演示re.A的使用"""
    text = "ad你好fac"
    pattern = r"w+"
    print(f"Unicode:{re.findall(pattern, text)}")
    print(f"ASCII:{re.findall(pattern, text, re.A)}")

regexFlag()
Unicode:['ad你好fac']
ASCII:['ad', 'fac']
  • DOTALL

语法: re.DOTALL 或简写为 re.S

作用: DOT表示.,ALL表示所有,连起来就是.匹配所有,包括换行符n。默认模式下.是不能匹配行符n的。

# re.S
def regexFlag():
    """演示re.S的使用"""
    text = """威哥
    最帅
    """
    pattern = r".*"
    print(f"默认模式:{re.findall(pattern, text)}")
    print(f".匹配所有模式:{re.findall(pattern, text, re.S)}")

regexFlag()
默认模式:['威哥', '', '    最帅', '', '    ', '']
.匹配所有模式:['威哥n    最帅n    ', '']
  • MULTILINE

语法: re.MULTILINE 或简写为 re.M

作用: 多行模式,当某字符串中有换行符n,默认模式下是不支持换行符特性的,比如:行开头 和 行结尾,而多行模式下是支持匹配行开头的。

# re.M
def regexFlag():
    """演示re.M的使用"""
    text = "威哥n最帅"
    pattern = r"^最帅"
    print(f"默认模式:{re.findall(pattern, text)}")
    print(f"多行模式:{re.findall(pattern, text, re.M)}")

regexFlag()
默认模式:[]
多行模式:['最帅']
  • VERBOSE

语法: re.VERBOSE 或简写为 re.X

作用: 详细模式,可以在正则表达式中加注解!

# re.X
def regexFlag():
    """演示re.X的使用"""
    text = "威哥最帅"
    pattern = r"""^威哥 #人物 
                   最帅 #形容词
              """
    print(f"默认模式:{re.findall(pattern, text)}")
    print(f"多行模式:{re.findall(pattern, text, re.X)}")

regexFlag()
默认模式:[]
多行模式:['威哥最帅']

re模块函数

查找一个匹配项

查找并返回一个匹配项的函数有3个:searchmatchfullmatch,分别是

search: 查找任意位置的匹配项

match: 必须从字符串开头匹配

fullmatch: 整个字符串与正则完全匹配

text = "a威哥大帅哥,威哥大帅哥"
pattern = r"威哥大帅哥"
print(f"search: {re.search(pattern, text).group()}")
print(f"match: {re.match(pattern, text)}")
print(f"fullmatch: {re.fullmatch(pattern, text)}")
search: 威哥大帅哥
match: None
fullmatch: None
text = "威哥大帅哥,威哥大帅哥"
pattern = r"威哥大帅哥"
print(f"search: {re.search(pattern, text).group()}")
print(f"match: {re.match(pattern, text).group()}")
print(f"fullmatch: {re.fullmatch(pattern, text)}")
search: 威哥大帅哥
match: 威哥大帅哥
fullmatch: None
text = "威哥大帅哥"
pattern = r"威哥大帅哥"
print(f"search: {re.search(pattern, text).group()}")
print(f"match: {re.match(pattern, text).group()}")
print(f"fullmatch: {re.fullmatch(pattern, text).group()}")
search: 威哥大帅哥
match: 威哥大帅哥
fullmatch: 威哥大帅哥

查找多个匹配项

findall: 从字符串任意位置查找,返回一个列表

finditer:从字符串任意位置查找,返回一个迭代器

text = "a威哥大帅哥,威哥小帅哥"
pattern = r"威(哥)大(帅哥)"
print(f"findall: {re.findall(pattern, text)}")
print(f"finditer: {re.finditer(pattern, text)}")
findall: [('哥', '帅哥')]
finditer: <callable_iterator object at 0x000001BCF680A250>

分割

re.split(pattern, string, maxsplit=0, flags=0)

函数:用 pattern 分开 stringmaxsplit表示最多进行分割次数, flags表示模式,就是上面我们讲解的常量!

text = "a威哥大帅哥,威哥小帅哥,威哥小帅哥"
pattern = r","
print(f"split: {re.split(pattern, text,maxsplit=1,flags=re.I)}")
split: ['a威哥大帅哥', '威哥小帅哥,威哥小帅哥']

替换

re.sub(pattern, repl, string, count=0, flags=0)

函数参数讲解:repl替换掉string中被pattern匹配的字符, count表示最大替换次数,flags表示正则表达式的常量。

text = "a威哥大帅哥,威哥小帅哥,威哥小帅哥"
pattern = r","
repl = "、"
print(f"sub: {re.sub(pattern, repl, string = text,flags=re.I)}")
sub: a威哥大帅哥、威哥小帅哥、威哥小帅哥

推荐几个好用的网站

1. PHP, PCRE, Python, Golang and JavaScript

2. ziishaned/learn-regex

参考资料

  1. https://zhuanlan.zhihu.com/p/127807805
  2. https://zhuanlan.zhihu.com/p/26019553
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值