Python正则表达式

前言

每当提取web网页内容时,往往是想到xpath和css选择器,但是当使用纯Python时,还是觉得实属困难,我知道可以装lxml来支持xpath方法,但是对于正则还是需要学习滴。

知识

正则表达式常用符号
符号含义
.匹配任意字符,换行符\n除外(re.S可以让它跨行)
*匹配前一个字符0次或无限次
?匹配前一个字符0次或1次
.*贪心算法
.*?非贪心算法
()括号内的数据作为结果返回
正则表达式函数

re.split函数
可用于字符串的多个分割符号的分割操作,而字符串默认的split只能一次按一个分隔符操作。

re.split(正则表达式, 匹配的字符串[, 分隔次数=0, 标志位=0])
re.split(r'[,;|\t]',str)

re.match函数
尝试从字符串的起始位置匹配一个模式,如果不是起始匹配成功的话,match()返回None,成功返回一个匹配对象

re.match(正则表达式,匹配字符串[,修饰符])

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

re.search函数(重点)
re.search扫描整个字符串并返回第一个成功的匹配。(在确定只有一个内容是时,使用search方法可以提高效率)

re.search(正则表达式,匹配字符串[,修饰符])

需要注意的是使用group()方法提取匹配到的字符串。
re.sub函数
可以用于替换字符串中的匹配项

re.sub(正则表达式,替换的字符串(可以是函数),匹配字符串[,替换次数(默认0表示替换所有)[,匹配模式]])
    import re
    phone = "2004-959-559 # 这是一个电话号码"
    #删除注释
    num = re.sub('#.*','',phone)
    print(num)
  #输出: '2004-959-559 '
    #删除非数字
    num = re.sub('\D','',phone)
    print(num)
  #输出: '2004959559'
    #删除数字
    num = re.sub('\d','',phone)
    print(num)
  #输出: '-- # 这是一个电话号码'

替换的字符串是函数(不太理解其中的正则?P的含义)

#将匹配的数字乘于 2
import re

def double(matched):
    value = int(matched.group('value'))
    return str(value * 2)
s = 'A23G4HFD567'
print(re.sub('(?P<value>\d+)', double, s))
#输出:reA46G8HFD1134

案例,把中文日期改为美国日期的格式mm/dd/yyyy。例如2016-05-23=>05/23/2016

# 写法一
re.sub('(\d{4})-(\d{2})-(\d{2})',r'\2/\3/\1',str)
# 写法二
re.sub('(?P<year>\d{4})-(?P<month>\d{2>)(?P<day>\d{2})',r'\g<month>/\g<day>/\g<year>',str)

re.compile函数(略)
写好并正则表达式对象,供 match() 和 search() 这两个函数使用。
(表示目前的自己不太想用这种方法,后期再看)

re.findall函数(重点)
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
findall(正则表达式,匹配字符串[,修饰符])

re.finditer函数
和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回
re.finditer(正则表达式,匹配字符串[,修饰符])

比较finditer和findall的遍历

import re
it = re.finditer(r"\d+","12a32bc43jf3") 
for match in it: 
    print (match.group())
  #输出
  #12
  #32
  #43
  #3
	
it = re.findall(r"\d+","12a32bc43jf3") 
for match in it: 
    print (match)
   #输出
  #12
  #32
  #43
  #3

结论:好吧,我还是喜欢用findall。

修饰符

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

常用

匹配英文:([a-zA-Z]+)
匹配汉字:([\u4e00-\u9fa5]+)

总结

这些正则表达式常用符号在昨晚(应该是今天1:42左右)在一个快速简介的视频上面的,至于函数是在菜鸟教程上面总结的,感觉用这个结合正则表达式图表,又可以开心的玩耍了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值