python正则表达式 - 30 正则表达式的基本用法
正则表达式的基础知识
什么是正则表达式 : 它是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
处理正则表达式相关的模块: import re
1.正则表达式相关 符号 的用法
(1) . : 任意字符
用法: 匹配一个第一个字符是a,第二个字符是任意字符,第三个字符是b的这样一个字符串
restr = r'a.b'
strstr = 'a-bab----===='
result = match(restr, strstr)
print(result)
>>> <_sre.SRE_Match object; span=(0, 3), match='a-b'>
(2) \w :字母、数字、下划线、中文
用法: 匹配第一个字符是l,第二个字符是字母、数字或者下划线,第三个字符是t的一个字符串
restr = r'l\wt'
strstr = 'l你tllll'
result = match(restr, strstr)
print(result)
>>> <_sre.SRE_Match object; span=(0, 3), match='l你t'>
(3) \s :空格、回车、制表符等(产生空白的字符)
用法: 匹配第一个字符是l,第二个字符是空白,第三个字符是t的一个字符串
restr = r'l\st'
#strstr = 'l_tllll' >>> None
strstr = 'l tllll'
result = match(restr, strstr)
print(result)
>>> <_sre.SRE_Match object; span=(0, 3), match='l t'>
(4) \d :匹配数字字符
用法: 匹配第一个字符是l,第二个字符是数字,第三个字符是t的一个字符串
restr = r'l\dt'
strstr = 'l0tssddd'
result = match(restr, strstr)
print(result)
>>> <_sre.SRE_Match object; span=(0, 3), match='l0t'>
(5) \b :匹配单词的边界(空格、逗号,句号,问号,冒号等…)
用法: 匹配一个第一个字符是数字,第二个字符是a,并且a后边是单词的边界的一个字符串
restr = r'\b\da\b'
strstr = '8a:pjuukk'
result = match(restr, strstr)
print(result)
>>> <_sre.SRE_Match object; span=(0, 2), match='8a'>restr = r'aaa\s\b\da\b,p'
strstr = 'aaa 8a,pooooo'
result = match(restr, strstr)
print(result)
>>> <_sre.SRE_Match object; span=(0, 8), match='aaa 8a,p'>
(6) ^ :匹配字符串的开始
用法: 匹配一个以the开头的字符串
restr = r'^the'
strstr = 'thekoojppp'
result = match(restr, strstr)
print(result)
>>> <_sre.SRE_Match object; span=(0, 3), match='the'>
(7) $ :匹配字符串的结束
用法: 可以匹配or结尾的字符串
restr = r'^the\d\wor$'
strstr = 'the8_or'
print(match(restr, strstr))
>>> <_sre.SRE_Match object; span=(0, 7), match='the8_or'>
(8) \W :匹配非字母、数字、下划线、中文字符
restr = r'a\Wp'
strstr = 'a~p0ppiuuuuu'
print(match(restr, strstr))
>>> <_sre.SRE_Match object; span=(0, 3), match='a~p'>
(9) \S :匹配非空白字符
restr = r'a\Sb'
strstr = 'a7b000pppp'
print(match(restr, strstr))
>>> <_sre.SRE_Match object; span=(0, 3), match='a7b'>
(10) \D :匹配非数字字符
restr = r'\d\D'
strstr = '8Lppppp'
print(match(restr, strstr))
>>> <_sre.SRE_Match object; span=(0, 2), match='8L'>
(11) \B :非边界匹配
restr = r'a\Babc\B'
strstr = 'aabcppp'
print(match(restr, strstr))
>>> <_sre.SRE_Match object; span=(0, 4), match='aabc'>
(12) [ ] :匹配字符集中的任意一个字符
用法: 匹配一个第一个字符a,第二个字符是b,c,d,t中的任意一个,第三个字符是数字
restr = r'a[bcdt]\d'
strstr = 'ac9llllll'
print(match(restr, strstr))
>>> <_sre.SRE_Match object; span=(0, 3), match='ac9'>
(13) [^] :匹配不在字符集中的任意一个字符
restr = r'a[^bcdt]\w'
strstr = 'a,问llll'
print(match(restr, strstr))
>>> <_sre.SRE_Match object; span=(0, 3), match='a,问'>
(14) * : X* 匹配X重复0次或者多次
用法: 匹配字符串开始是0个或者多个a字符,紧跟着bc这样的字符串
restr = r'a*bc'
strstr = 'aaabc'
print(match(restr, strstr))
>>> <_sre.SRE_Match object; span=(0, 5), match='aaabc'>restr = r'a\d*'
strstr = 'a900pppp'
print(match(restr, strstr))
>>> <_sre.SRE_Match object; span=(0, 4), match='a900'>
(15) + : X+ 匹配X重复1次或者多次
restr = r'a+bc'
strstr = 'aaabc,,,,'
print(match(restr, strstr))
>>> <_sre.SRE_Match object; span=(0, 5), match='aaabc'>
(16) ? : X? 匹配X重复0次或者1次
restr = r'a?bc'
strstr = 'abc'
print(match(restr, strstr))
>>> <_sre.SRE_Match object; span=(0, 3), match='abc'>
(17) X{N} : 匹配X重复N次 X{N,}:匹配X重复至少N次 X{M,N} : 匹配X重复M到N次
restr = r'\d{5,6}'
strstr = '8928990ppp'
print(match(restr, strstr))
>>> <_sre.SRE_Match object; span=(0, 6), match='892899'>
(18) | :分支, 或者
用法: 可以匹配abc或者bpp
restr = r'abc|bpp'
strstr = 'bppkkkkk'
print(match(restr, strstr))
>>> <_sre.SRE_Match object; span=(0, 3), match='bpp'>restr = r'\d{5}\w|\w{5}[ymn]|R*\d.'
strstr = '98764woooooo'
strstr = 'ah67_yppppppp'
strstr = 'RRRR9mppppp'
print(match(restr, strstr))
>>> <_sre.SRE_Match object; span=(0, 6), match='RRRR9m'>
2. 正则表达式相关 函数 的用法
(1) compile()
编译正则表达式,返回一个正则表达式对象(没有检测正则表达式是否正确的功能)
restr = r'b[1-9]{6}\w'
reobject = re.compile(restr)
print(reobject)
>>> re.compile('b[1-9]{6}\\w')print(re.match(reobject, 'b889765wppppp'))
>>> <_sre.SRE_Match object; span=(0, 8), match='b889765w'>
(2) match()
通过指定的正则表达式去匹配指定的字符串,失败会返回None.成功返回匹配对象
restr1 = r'aa\d*'
print(re.match(restr1, 'aa67pppp'))
>>> <_sre.SRE_Match object; span=(0, 4), match='aa67'>
(3) search()
搜索字符串中第一次出现正则表达式的模式。找到就返回匹配对象,没找到返回None
restr2 = r'a\db{2}'
print(re.search(restr2, "bndha1bbdhjsjsa9bbppp"))
>>> <_sre.SRE_Match object; span=(4, 8), match='a1bb'>
(4) split()
maxsplit:控制拆分次数,如果是0,就是全部拆分
在字符串中以正则表达式匹配到的字符串为拆分点,对字符串进行拆分
restr3 = r'\d'
str_list = re.split(restr3, 'uuu h7hh jj k9k ll ii')
print(str_list)
>>> ['uuu h', 'hh jj k', 'k ll ii']
(5) sub()
用指定的字符串替换原字符串中与正则表达式匹配的模式 可以用count指定替换的次数
restr4 = r'[操肏艹草曹]|fuck|shit|煞笔|sb|SB|傻叉|Fuck|FUCK'
strstr = '你丫是傻叉吗? 我操你大爷的. Fuck you.'
new_str = re.sub(restr4, '*', strstr)
print(new_str)
>>> 你丫是*吗? 我*你大爷的. * you.
(6) findall()
查找字符串所有与正则表达式匹配的模式 返回字符串的列表
from re import findalldef sum_num_seq(string):total = 0for val in map(int, findall(r'\d+', string)):total += valreturn totalprint(sum_num_seq('1h3ad4as5h6n'))
print(sum_num_seq('8123917289'))>>>19
>>>8123917289
练习 1: 验证输入用户名和QQ号是否有效并给出对应的提示信息
# 要求:
# 用户名必须由字母、数字或下划线构成且长度在6~20个字符之间,第一个字符不能是数字
# QQ号是5~12的数字且首位不能为0from re import matchdef main():username = input('用户名:')qq = input('QQ:')restr = r'[a-zA-Z_][a-zA-Z0-9_]{5,19}$'result = match(restr, username)if result == None:print('用户名输入有误')else:print(result)restr2 = r'[1-9][0-9]{4,11}$'result2 = match(restr2, qq)if result2 == None:print('QQ号输入有误')else:print(qq)if __name__ == '__main__':main()
练习2 : 替换字符串中的不良内容
import redef main():sentence = '你丫是傻叉吗? 我干你大爷的. Fuck you.'purified = re.sub('[操肏艹草曹干]|fuck|shit|傻[比屄逼叉缺吊屌]|煞笔','*', sentence, flags=re.IGNORECASE)print(purified) # 你丫是*吗? 我*你大爷的. * you.if __name__ == '__main__':main()
python正则表达式 - 30 正则表达式的基本用法相关推荐
- Python正则表达式的几种匹配用法
Python正则表达式的几种匹配用法 下面列出: 1.测试正则表达式是否匹配字符串的全部或部分regex=ur"" #正则表达式 if re.search(regex, subje ...
- python学习之 ---正则表达式规则与正则表达式在python的应用
正则表达式 概述 正则表达式30分钟快速入门 正则表达式是文本处理极为重要的技术,用它可以对字符串按照某种规则进行检索,替换 分类 BRE 基本正则表达式,grep.sed.vi等软件支持.vim有扩 ...
- 666,太香了!Python 50 个正则表达式写法,建议收藏
什么是正则表达式? 正则表达式(Regular Expression)通常被用来检索.替换那些符合某个模式(规则)的文本. 此处的Regular即是规则.规律的意思,Regular Expressio ...
- python正则表达式_Python正则表达式简记和re库!
正则表达式是定义搜索模式的字符序列.通常这种模式被字符串搜索算法用于字符串上的"查找"或"查找和替换"操作,或者用于输入验证. 1. 正则表达式的语法 . 表示 ...
- js 正则表达式奇偶字符串替换_Python中的正则表达式及其常用匹配函数用法简介...
今 日 鸡 汤 此曲只应天上有,人间难得几回闻. /1 前言/ 这次给大家主要是介绍Python中的正则表达式,及其相关函数的基本使用方法,并且捎带一些正则表达式给我们带来的便利. /2 简介/ Py ...
- python3.7正则表达式语法_python3正则表达式的几个高级用法
python3正则表达式的几个高级用法 一. 概述 本文举例说明python3正则表达式的一些高级级法,主要是各类分组,可应用于 1.复杂网页文件中的有用数据 例如,采用爬虫技术取得网页后,对网页内任 ...
- [Python]网络爬虫(七):Python中的正则表达式教程(转)
接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一下Python中的正则表达式的相关内容. 正则表达式在Python爬虫中的作用就像是老师点名时用的花名册一样,是必不可少的神兵利器. ...
- python进阶18正则表达式
原创博客链接:python进阶18正则表达式 正则基础知识 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ^`:匹配行首 `$`:匹配结尾 `*`:( ...
- Python爬虫:正则表达式?就这
前言 当你点开文章的时候,我就知道这次的标题有点装逼了,哈哈,不过不要紧,还好我写的都是干货. 正则表达式是处理字符串的强大工具,它有自己特定的语法结构,可以实现字符串的检索.替换.匹配验证. 案例引 ...
最新文章
- python减少内存_如何降低 Python 的内存消耗量?
- [记录]calculate age based on date of birth
- oracle 截取字符串中指定位置_手撕虚拟内存(1)——字符串在虚拟内存中的段位置与/proc虚拟文件系统...
- 20应用统计考研复试要点(part7)--统计学
- Java泛型详解:<T>和Class<T>的使用,泛型类
- TFS 2012研发管理能力(9)
- Linux双网卡绑定实现
- java基础—对象转型
- 谁说漂亮女程序猿就不能拿大厂Offer了?
- 内存泄漏(memory leak)的理解与应用
- 九九乘法表Java代码
- 云服务器网站logo,云服务器 logo
- 系统还原点设置被系统管理员禁用
- 【5G NR】RRC Reject解析
- 360wifi驱动linux驱动安装,360WiFi驱动安装使用教程,详细图文版
- Eric S. Raymond 五部曲 之 《开拓智域》
- Pytorch|YOWO原理及代码详解(二)
- 项目计划执行过程中,如何分析进度偏差?
- 1.1 命题逻辑 笔记
- 苹果5s农历显示订阅服务器,苹果5s怎么显示农历,苹果5S怎样设置阴历呢?
热门文章
- webshell查杀工具
- Boost -----无法打开文件“libboost_thread-vc120-mt-gd-x32-1_73.lib
- SpringBoot 面向切面编程
- 台湾新代数控系统数据采集CNC系列
- php undefined 判断,JS中如何判断null、undefined与NaN
- 基于ANSYS 2019R1全解一款双吸泵的双向流固耦合方法
- 如何使用华为云快速搭建个人博客
- python中的strip()和split()函数
- prezi1破解安装与使用
- 哈夫曼 (Huffman) 树的动画演示