正则表达式的基础知识

什么是正则表达式 : 它是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

处理正则表达式相关的模块: 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 正则表达式的基本用法相关推荐

  1. Python正则表达式的几种匹配用法

    Python正则表达式的几种匹配用法 下面列出: 1.测试正则表达式是否匹配字符串的全部或部分regex=ur"" #正则表达式 if re.search(regex, subje ...

  2. python学习之 ---正则表达式规则与正则表达式在python的应用

    正则表达式 概述 正则表达式30分钟快速入门 正则表达式是文本处理极为重要的技术,用它可以对字符串按照某种规则进行检索,替换 分类 BRE 基本正则表达式,grep.sed.vi等软件支持.vim有扩 ...

  3. 666,太香了!Python 50 个正则表达式写法,建议收藏

    什么是正则表达式? 正则表达式(Regular Expression)通常被用来检索.替换那些符合某个模式(规则)的文本. 此处的Regular即是规则.规律的意思,Regular Expressio ...

  4. python正则表达式_Python正则表达式简记和re库!

    正则表达式是定义搜索模式的字符序列.通常这种模式被字符串搜索算法用于字符串上的"查找"或"查找和替换"操作,或者用于输入验证. 1. 正则表达式的语法 . 表示 ...

  5. js 正则表达式奇偶字符串替换_Python中的正则表达式及其常用匹配函数用法简介...

    今 日 鸡 汤 此曲只应天上有,人间难得几回闻. /1 前言/ 这次给大家主要是介绍Python中的正则表达式,及其相关函数的基本使用方法,并且捎带一些正则表达式给我们带来的便利. /2 简介/ Py ...

  6. python3.7正则表达式语法_python3正则表达式的几个高级用法

    python3正则表达式的几个高级用法 一. 概述 本文举例说明python3正则表达式的一些高级级法,主要是各类分组,可应用于 1.复杂网页文件中的有用数据 例如,采用爬虫技术取得网页后,对网页内任 ...

  7. [Python]网络爬虫(七):Python中的正则表达式教程(转)

    接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一下Python中的正则表达式的相关内容. 正则表达式在Python爬虫中的作用就像是老师点名时用的花名册一样,是必不可少的神兵利器. ...

  8. python进阶18正则表达式

    原创博客链接:python进阶18正则表达式 正则基础知识 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ^`:匹配行首 `$`:匹配结尾 `*`:( ...

  9. Python爬虫:正则表达式?就这

    前言 当你点开文章的时候,我就知道这次的标题有点装逼了,哈哈,不过不要紧,还好我写的都是干货. 正则表达式是处理字符串的强大工具,它有自己特定的语法结构,可以实现字符串的检索.替换.匹配验证. 案例引 ...

最新文章

  1. python减少内存_如何降低 Python 的内存消耗量?
  2. [记录]calculate age based on date of birth
  3. oracle 截取字符串中指定位置_手撕虚拟内存(1)——字符串在虚拟内存中的段位置与/proc虚拟文件系统...
  4. 20应用统计考研复试要点(part7)--统计学
  5. Java泛型详解:<T>和Class<T>的使用,泛型类
  6. TFS 2012研发管理能力(9)
  7. Linux双网卡绑定实现
  8. java基础—对象转型
  9. 谁说漂亮女程序猿就不能拿大厂Offer了?
  10. 内存泄漏(memory leak)的理解与应用
  11. 九九乘法表Java代码
  12. 云服务器网站logo,云服务器 logo
  13. 系统还原点设置被系统管理员禁用
  14. 【5G NR】RRC Reject解析
  15. 360wifi驱动linux驱动安装,360WiFi驱动安装使用教程,详细图文版
  16. Eric S. Raymond 五部曲 之 《开拓智域》
  17. Pytorch|YOWO原理及代码详解(二)
  18. 项目计划执行过程中,如何分析进度偏差?
  19. 1.1 命题逻辑 笔记
  20. 苹果5s农历显示订阅服务器,苹果5s怎么显示农历,苹果5S怎样设置阴历呢?

热门文章

  1. webshell查杀工具
  2. Boost -----无法打开文件“libboost_thread-vc120-mt-gd-x32-1_73.lib
  3. SpringBoot 面向切面编程
  4. 台湾新代数控系统数据采集CNC系列
  5. php undefined 判断,JS中如何判断null、undefined与NaN
  6. 基于ANSYS 2019R1全解一款双吸泵的双向流固耦合方法
  7. 如何使用华为云快速搭建个人博客
  8. python中的strip()和split()函数
  9. prezi1破解安装与使用
  10. 哈夫曼 (Huffman) 树的动画演示