python-正则表达式

正则表达式

一、正则基础

^ :匹配字符串的开头
$ :匹配字符串的末尾。
. :匹配任意字符,除了换行。
[] : 用来表示一组字符,表示范围,单独列出:[amk] 匹配 ‘a’,‘m’或’k’
[^...] :不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
* :匹配0个或多个的表达式。
+: 匹配1个或多个的表达式。
? :匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
{ n} :匹配n个前面表达式。例如,"o{2}“不能匹配"Bob"中的"o”,但是能匹配"food"中的两个o。
{ n,} :精确匹配n个前面表达式。例如,"o{2,}“不能匹配"Bob"中的"o”,但能匹配"foooood"中的所有o。"o{1,}“等价于"o+”。“o{0,}“则等价于"o*”。
{ n, m} :匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
a| b :匹配a或b
(re) :匹配括号内的表达式,也表示一个分组
\w :匹配数字字母下划线
\W :匹配非数字字母下划线
\s :匹配任意空白字符,等价于 [\t\n\r\f]。
\S :匹配任意非空字符
\d :匹配任意数字,等价于 [0-9]。
\D :匹配任意非数字
\A :匹配字符串开始
\Z :匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。
\z :匹配字符串结束
\G :匹配最后匹配完成的位置。
\b :匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配"never” 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
\B :匹配非单词边界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
\n, \t,: 匹配一个换行符。匹配一个制表符。

二、re模块

1、查找匹配

(1)re.match
re.match(r’正则表达式’,字符串):匹配字符串,若匹配成功则返回一个匹配对象,否则返回None。
re.match(pattern, string, flags=0):flags为标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

正则表达式中用()表示分组,用()括起部分在匹配成功后可通过group(n)获取对应的值。

import re


def re_demo(email):
    response = re.match(r'^([\d\w\.]*)@([\d\w]*)\.[\w]{2,3}$', email)
    if response:
        print("匹配成功")
        print(response.group(0))
        print(response.group(1))
        print(response.group(2))
    else:
        print("匹配失败")

re_demo('someone@gmail.com')

输出:

匹配成功
someone@gmail.com
someone
gmail

(2)re.search()方法
re.search(pattern, string, flags=0):扫描整个字符串并返回第一个成功的匹配。

def re_search(search_word):
    response = re.search(r'(.*) are (.*)',search_word)
    if response:
        print(response.group())
        print(response.group(1))
        print(response.group(2))
    else:
        print("没找到啦")
re_search('hhh are ju')

输出:

hhh are ju
hhh
ju

re.match与re.search的区别:
re.match 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None,而 re.search 匹配整个字符串,直到找到一个匹配。

2.替换

re.sub(pattern, repl, string, count=0, flags=0),返回替换后的字符串

pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
flags : 编译时用的匹配模式,数字形式。

def re_sub(word):
    response = re.sub(r'\d','',word)
    print(response)
re_sub('1234hanqing3%#$@qing')

输出:

hanqing%#$@qing

3.预编译

re.compile()方法

python中使用正则时,re模块内部会处理两件事:

(1)编译正则表达式,如果正则表达式的字符串本身不合法,会报错;
(2)用编译后的正则表达式去匹配字符串。
为了减少编译花费的时间,可以先采取预编译。

#编译
response = re.compile(r'正则表达式')
#使用
response.match(字符串)

4.切分字符串

re.split(r’正则表达式’,字符串),返回内容为一个切分后的字符串列表

def re_split(word):
    print(re.split(r'[, ]+', word))
re_split('han,ew ew er,e')

输出:

['han', 'ew', 'ew', 'er', 'e']

5.查找全部

re.findall(string[, pos[, endpos]]):在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
re.findall(pattern, string, flags=0)
说明:
string 待匹配的字符串。
pos 可选参数,指定字符串的起始位置,默认为 0。
endpos 可选参数,指定字符串的结束位置,默认为字符串的长度。

注意:match 和 search 是匹配一次 findall 匹配所有。

def re_findall(word):
    print(re.findall(r'[\d\w]+', word))
re_findall('453yehfjd@2$dk%^&*fd')

输出:

['453yehfjd', '2', 'dk', 'fd']

re.finditer(pattern, string, flags=0):在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值