基本用法(点击链接:在线正则表达式测试)
import re
1、findall 查找所有. 返回liststring = '我是身高为170的女孩'
ex = "\d+" # 正则表达式
# 第一个参数:表达式,第二个:被匹配的目标值,返回个list,第三个:re.S用来处理回车,忽略回车
print(re.findall(ex,string,re.S)) 2、 search会进?匹配. 但是如果匹配到了第?个结果. 就会返回这个结果. 如果匹配不上search返回的则是None
ret = re.search(r'\d', '5点之前. 你要给我5000万').group()
print(ret)
ex = '(?P<id>\d*)' # ?P<id> 表示匹配出来的数据命名为id
ret = re.search(ex, '5点之前. 你要给我5000万').group('id')
print(ret)3、match 只能从字符串的开头进?匹配
ret = re.match('a', 'abc').group()
print(ret) 4、finditer, 和findall差不多. 只不过这时返回的是迭代器
it = re.finditer("m", "mai le fo len, mai nimei!")
for el in it:print(el.group()) # 依然需要分组5、compile() 可以将?个??的正则进?预加载. ?便后?的使?
obj = re.compile(r'\d{3}') # 将正则表达式编译成为?个 正则表达式对象, 规则要匹配的是3个数字
ret = obj.search('abc123eeee') # 正则表达式对象调?search, 参数为待匹配的字符串
print(ret.group()) # 结果: 123
常用的正则表达式
一、匹配字符:. 匹配除换?符以外的任意字符
\w 匹配字?或数字或下划线
\d 匹配数字
^ 匹配字符串的开始
$ 匹配字符串的结尾
\W 匹配?字?或数字或下划线
\D 匹配?数字
\S 匹配?空?符
a|b 匹配字符a或字符b() 匹配括号内的表达式,也表示?个组
[ABC] 匹配字符组中的字符[^...] 匹配除了字符组中字符的所有字符二、量词: 控制前?的元字符出现的次数
* 重复零次或更多次
+ 重复?次或更多次
? 重复零次或?次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次三、贪婪匹配和惰性匹配
.* 贪婪匹配, 尽可能多的去匹配结果
.*? 惰性匹配, 尽可能少的去匹配结果
部分示例
import re
string = '我是身高为170的女12孩1'
ex = "\d+" # \d提取数字,返回数字列表,+号表示将在一起的数字拼接起来
print(re.findall(ex,string)) string = 'https,http'
ex = "https?" # 匹配http,或者https,?表示左侧的字符出现0-1次
print(re.findall(ex,string)) string = '这是手机号13403484838'
ex = "1[3,5,6,7,8,9]\d{9}" #第1位是1,第二位是3,5,6,7,8,9,后面是9位数
print(re.findall(ex,string))string = ' 玩?吃鸡游戏, 晚上?起上玩儿游戏, ?嘛呢? 打游戏'
ex = "玩?.*游戏" #贪婪模式,尽量后面匹配,这样提取的数据就多,所以叫贪婪
ex = "玩?.*?游戏" #惰性模式,尽量往前匹配,这样就得到的数据就少
print(re.findall(ex,string))string = ' 玩?吃鸡游戏, 晚上?起上玩儿游戏, ?嘛呢? 打游戏'
ex = "玩?(.*?)游戏" #加上(),就只返回()内的数据
print(re.findall(ex,string))