Python全栈工程师

24.1-正则表达式元字符和重复

2019-10-18  本文已影响0人  BeautifulSoulpy

把美丽作为一种人生态度,自信、自律,保持初心,感知美好,让美丽由内而外的盛放!

正则表达式是必备技能之一

正则表达式难学在于没有吧那些例子吃透,

总结:

  1. win下换行符可能是 回车换行符 \r\nCR|LF
  2. 一旦扫描绝不回头;不会重叠匹配123 \d\d -12;

正则表达式 Regular Expression

正则表达式 Regular Expression,缩写regex、regexp、RE等;

当今计算机主要是处理文本和数据(至少目前是这样的),特别是在Web兴起之后,开发任务中的有一大堆都是对字符串的处理.

1.什么是正则表达式

正则表达式,就是一种描述字符串结构模式的形式化表达方式.正则表达式它简单,优美,功能强大,妙用无穷.

正则表达式主要是用来处理文本,或者准确说是处理对象序列,对于很多实际工作来说,可以成百倍的提高开发效率和程序质量.

有的同学也许会说,正则表达式不是很复杂吗,就正则本身来说,它的规则并不复杂,但是组合起来就复杂了,不然也不会威力无穷啊,所以学的话最好从本质入手,才能真正掌握正则的奥秘.

2.正则表达式分类

  • BRE:基本正则表达式,grep、sed、vi 等软件支持,vim 有拓展;
  • ERE:扩展正则表达式,egrep(grep -E)、sed -r 等;
  • PCRE:几乎所有高级语言都是PCRE的变种,python从106开始使用SRE正则引擎,可以认为是PCRE的子集,见模块re;

3.正则表达式进行匹配的流程

依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。


4. 基本语法

元字符 matacharacter(一个字符)

对于PCRE的多种变种,元字符在每一种 编程语言中 都是基本一致的,
\b是一个例外,指的是单词的边界;

元字符 每次匹配一个字符;元字符可以组合 \d\d\d
一旦扫描绝不回头;不会重叠匹配123 \d\d -12;

代码 说明 举例
. 匹配除换行符外任意一个字符 . win下换行符可能是 回车换行符 \r\n
[abc] 字符集合,只能表示一个字符位置。匹配所包含的任意一个字符 [abc]匹配plain中的'a'
[^abc] 字符集合,只能表示一个字符位置。匹配除去集合内字符的任意一个字符 [^abc]可以匹配plain中的'p'、'l'、'i'或者'n'
[a-z] 字符范围,也是个集合,表示一个字符位置,匹配所包含的任意一个字符 常用[A-Z][0-9]
[^a-z] 字符范围,也是个集合,表示一个字符位置,匹配除去集合内字符的任意一个字符
\b 匹配单词的边界 \bb 在文本中找到单词中b开头的b字符
\B 不匹配单词的边界 t\B 包含t的单词但是不以t结尾的t字符,例如write \Bb不以b开头的含有b的单词,例如able
\d [0-9]匹配一位数字 \d
\D [^0-9]匹配一位非数字
\s 匹配1位任何空白字符,包括制表符、换行符、空格 如 [\t\n\r\f\v]
\S 匹配1位非空白字符
\w 匹配[a-zA-Z0-9_]任何大小写字母, 数字和 包含中文的字; 不匹配符号,。.
\W 匹配\w之外的字符 (匹配 符号,空格、换行符、回车符)
[...] 用来表示一组字符,单独列出,比如[amk]匹配a、m或k
[^...] 不在[]中的字符,比如[^abc]匹配除了a、b、c之外的字符
\Z 匹配字符串结尾,如果存在换行,只匹配到换行前的结束字符串
\z 匹配字符串结尾,如果存在换行,同时还会匹配换行符
\G 匹配最后匹配完成的位置
\n 匹配一个换行符
\t 匹配一个制表符
字符集合[]
[1111111]   [1]
[abbbbbbbb]   [ad]
[0-2]   [0]、[1]、[2]
转义

凡是在正则表达式中他有特殊意义的符号,如果想使用它的本意,请使用\转义
反斜杠自身吗,得使用\\

重复

前面重复多少次的问题;

代码 说明 举例
* 表示前面的正则表达式会重复0次或多次 e\w* 单词中e后面可以有非空白字符
+ 表示前面的正则表达式重复至少1次 e\w+ 单词中e后面至少有一个非空白字符
表示前面的正则表达式会重复0次或1次 e\w? 单词中e后面至多有一个非空白字符
{n} 重复固定的n次 e\w{1} 单词中e后面只能有一个非空白字符
{n,} 重复至少n次 e\w{1,} 等价 e\w+、e\w{0,} 等价 e\w*、e\w{0,1} 等价 e\w?
{n,m} 重复n到m次 e\w{1,10} 单词中e后面至少1个,至多10个非空白字符

练习:

1. 匹配手机号码:字符为"手机号码13851888188。"
1[0-9]{10}   1\d{10}
以13开头的:  (13|17)\d{9}


2. 匹配中国座机:字符串为"号码为025-83105736、0543-5467328。"
\d{3,4}-\d{7,8}

上一篇下一篇

猜你喜欢

热点阅读