python中re.compile()用法详解

        编译正则表达式模式,返回一个对象。可以把常用的正则表达式编译成正则表达式对象,方便后续调用及提高效率。

源码解析:

def compile(pattern, flags=0):
    "Compile a regular expression pattern, returning a Pattern object."
    return _compile(pattern, flags)

语法结构:

re.compile(pattern, flags=0)
  • pattern 指定编译时的表达式字符串
  • flags 编译标志位,用来修改正则表达式的匹配方式。支持 re.L|re.M 同时匹配

flags 标志位参数:

  • re.I(re.IGNORECASE) :使匹配对大小写不敏感
  • re.L(re.LOCAL) :做本地化识别(locale-aware)匹配
  • re.M(re.MULTILINE) :多行匹配,影响 ^ 和 $
  • re.S(re.DOTALL) :使 . 匹配包括换行在内的所有字符
  • re.U(re.UNICODE):根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
  • re.X(re.VERBOSE):该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

示例代码1:

import re

s = 'a,b,,,,c d'
a = re.compile('[, ]+')
b = a.split(s)
print(a)
print(b)

c = re.compile('[,]+')
d = c.split(s)
print(d)

运行结果:

示例代码2:   【对比示例代码1,不使用re.compile()】

import re

s = 'a,b,,,,c d'
# a = re.compile('[, ]+')
b = re.split('[, ]+', s)
print(b)

# c = re.compile('[,]+')
d = re.split('[,]+', s)
print(d)

运行结果:

示例代码3:  【使用re.I:对大小写不敏感】

import re

s = 'aBdfbksdBjksdbsk'
aa = re.compile('b')
bb = aa.split(s)
print(bb)

s = 'aBdfbksdBjksdbsk'
aa = re.compile('b', re.I)
bb = aa.split(s)
print(bb)

运行结果:

示例代码4:  【匹配手机号】

import re

s1 = 'num:12345678900,name:dgw,phone:19876543210,age:25'
s2 = 'num:12345678900,name:dgw,phone:119876543210,age:25'

aa = re.compile(r'(?<=\D)1[3456789]\d{9}', re.S)
bb = aa.findall(s1)
print(bb)

cc = re.compile(r'(?<=\D)1[3456789]\d{9}', re.S)
dd = cc.findall(s2)
print(dd)

ee = re.compile(r'1[3456789]\d{9}', re.S)
ff = ee.findall(s2)
print(ff)

gg = re.compile(r'(?<=\d)1[3456789]\d{9}', re.S)
hh = gg.findall(s2)
print(hh)

运行结果:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值