Python学习笔记 - 正则表达式

模块

  • python 处理正则表达式的模块是 re
import re

匹配

match(pattern, string, flags=0) 用来判断pattern是否匹配string,如果匹配,返回的是一个 match 对象,如果不匹配,返回 Nonepattern 中可以通过 \num 或者 (?P=group) 引用分组。
Match对象主要有三个方法:

方法作用
group(num=0)返回匹配内容,如果num为0,返回整个匹配内容,否则返回相应匹配的分组
groups(default=None)以tuple的形式返回所有匹配的子组
groupdict(default=None)以dict的形式返回所有匹配的子组

注:所谓子组,是指正则表达式中用小括号括起来的分组,子组的顺序按照左小括号的顺序来决定。

例子:

#coding=utf-8

import re

PATTERN = r'(?P<prefix>\d{3})-?(?P<number>\d{8})'

PHONE_NUMBER = '18612345678'

m = re.match(PATTERN, PHONE_NUMBER)
if m is not None:
    print(m.group())      # 18612345678
    print(m.group(0))     # 18612345678
    print(m.group(1))     # 186
    print(m.group(2))     # 12345678
    print(m.groups())     # ('186', '12345678')
    print(m.groupdict())  # {'prefix': '186', 'number': '12345678'}
else:
    print("Does not match")

搜索

search(pattern, string, flags=0) 用来在 string 中搜索第一次 pattern 匹配的地方。如果找到,返回 match 对象,否则返回 None

例子:

#coding=utf-8

import re

PATTERN = r'12345'
TEST_STR = '1112345'

m = re.search(PATTERN, TEST_STR)
if m is not None:
    print(m.group())      # 12345
else:
    print("Does not match")

查找

findall(pattern, string[,flags]) 查找 string 中出现的所有 pattern,返回匹配列表。
finditer(pattern, string[, flags])findall 类似,不同的是返回迭代器。

例子:

#coding=utf-8

import re

PATTERN = r'\d{3}'
TEST_STR = '123456789'

print(re.findall(PATTERN, TEST_STR)[0])  # ['123', '456', '789']

print([m.group() for m in re.finditer(PATTERN, TEST_STR)]) # ['123', '456', '789']

替换

sub(pattern, repl, string, count=0)string 中的 pattern 替换为 replcount 表示替换的次数。repl 中可以通过 \num 或者 \g<groupname> 来引用 pattern 中的分组。

例子:

#coding=utf-8

import re

PATTERN = r'(\w)\1' # 或者 r'(?P<coupled>\w)(?P=coupled)'
REPL = r'\1\1\1'    # 或者 r'\g<coupled>\g<coupled>\g<coupled>'
TEST_STR = 'A good cook could cook as much cookies as a good cook who could cook cookies.'

print(re.sub(PATTERN, REPL, TEST_STR))

# A goood coook could coook as much coookies as a goood coook who could coook coookies.

分割

split(pattern, string, max=0)string 按照 pattern 分割,最多 max 次。

例子:

#coding=utf-8

import re

PATTERN = r'\s'
TEST_STR = '123    456\t\t789\n'

print(re.split(PATTERN, TEST_STR))

# ['123', '', '', '', '456', '', '789', '']

# remove blank using filter()
print([item for item in filter(lambda x: x!='', re.split(PATTERN, TEST_STR))])

# ['123', '456', '789']

标志

标志作用
re.I, re.IGNORECASE忽略大小写
re.L, re.LOCALE\w, \W, \b, \B, \s, \S 本地化
re.M, re.MULTILINE^$匹配每一行,而不是整个字符串
re.S, re.DOTALL.也匹配\n
re.X, re.VERBOSE忽略空格和空格后面的#号,多用在注释
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值