前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >python进阶之正则表达式

python进阶之正则表达式

作者头像
py3study
发布2020-01-20 12:12:22
发布2020-01-20 12:12:22
5190
举报
文章被收录于专栏:python3python3
概念:

  正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

目的?    

  给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

  1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)。

  2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。

符号: 

    正则表达试由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,我下面会给予解释。在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。例如,正则表达式"testing"中没有包含任何元字符,它可以匹配"testing"和"testing123"等字符串,但是不能匹配"Testing"。要想真正的用好正则表达式,正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的一个简短的描述。

正则

待匹配字符

匹配结果

说明

[0123456789]

8

True

在一个字符组里枚举合法的所有字符,字符组里的任意一个字符和"待匹配字符"相同都视为可以匹配

[0123456789]

a

False

由于字符组中没有"a"字符,所以不能匹配

[0-9]

7

True

也可以用-表示范围,[0-9]就和[0123456789]是一个意思

[a-z]

s

True

同样的如果要匹配所有的小写字母,直接用[a-z]就可以表示

[A-Z]

B

True

[A-Z]就表示所有的大写字母

[0-9a-fA-F]

e

True

可以匹配数字,大小写形式的a~f,用来验证十六进制字符

字符:

元字符

匹配内容

.

匹配除换行符以外的任意字符

\w

匹配字母或数字或下划线

\s

匹配任意的空白符

\d

匹配数字

\n

匹配一个换行符

\t

匹配一个制表符

\b

匹配一个单词的结尾

^

匹配字符串的开始

$

匹配字符串的结尾

\W

匹配非字母或数字或下划线

\D

匹配非数字

\S

匹配非空白符

a|b

匹配字符a或字符b

()

匹配括号内的表达式,也表示一个组

[...]

匹配字符组中的字符

[^...]

匹配除了字符组中字符的所有字符

量词:

量词

用法说明

*

重复零次或更多次(贪婪匹配)

+

重复一次或更多次(贪婪匹配)

?

重复零次或一次

{n}

重复n次

{n,}

重复n次或更多次

{n,m}

重复n到m次

这边推荐一个验证正则表达式的一个工具 http://tool.chinaz.com/regex/

接下来大家可以使用上面的工具来测试下面说的实例

实例:
1.匹配任意数字

  [0123456789]---abc123def456只要一个字符串中包含数字,都会被匹配到

2.匹配任意小写字母

  [a-z] ----abc123def456只要字符串中包含任意小写字符,都会被匹配

3.匹配任意大写字母

  [A-Z] ----ABC123DEF456只要字符串中包含任意大写字符,都会被匹配

4.匹配数字+小写字母+大写字母

  [0-9A-Za-z] ----ABCabc123DEF456只要字符串中包含数字小写大写字母都回匹配

5.\w  与  \W与  [\w\W](匹配所有字符)

 6.\s  与  \S  与  [\s\S](匹配所有字符)

7.\d  与  \D  与  [\d\D](匹配所有字符)
8.\n  与  \t(tab制表符)  与  \b
9.^(匹配一个字符串的开头)   与  $

(匹配以[a-z]开头,以[a-z]结尾的字符串,这里只能匹配2个字符的字符串,因为[]代表一个字符组)

10.a|b(从左向右匹配,优先匹配a)

(左边匹配了,右边不会再匹配)

11.[^...]
组合练习:
*+?{}

待匹配字符串

正则表达式

匹配结果

说明

小李和小王和小亮 小李和小王王和小亮亮亮

[^和]+

小李小王小亮 小李小王王小亮亮亮

匹配非'和'的所有字符串多次

小李和小王王和小亮亮亮

[^和]{2,4}

小李小王王小亮亮亮

匹配非‘和’的所有字符串2到4次

小李和小王王和小亮亮亮

[^和]{2,4}?

小李小王小亮亮亮

匹配非‘和’的所有字符串2次

小李和小王王和小亮亮亮

小.?

小李小王小亮

匹配小后面任意字符0次或1次

小李和小王王和小亮亮亮

小.*

小李和小王王和小亮亮亮

匹配小后面任意字符0次或多次

小李和小王王和小亮亮亮

小.+

小李和小王王和小亮亮亮

匹配小后面任意字符一次或多次

小李和小王王和小亮亮亮

小.{1,2}

小李和小王王小亮亮

匹配小后面任意字符一次到2次

小李和小王王和小亮亮亮

小.*?

小小小

匹配小后面任意字符0次(因为有?限制,表示匹配最少的页就是0次即什么都不匹配)

字符集[] [^]

待匹配字符串

正则表达式

匹配结果

说明

小李和小王王和小亮亮亮

小[李王王亮亮亮]*

小李小王王小亮亮亮

匹配小后面字符组里面任意字符0次或多次

小李和小王王和小亮亮亮

小[^和]*

小李小王王小亮亮亮

匹配小后面非和子的任意字符0次或多次

123abc345

[\d]

1 2 3 3 4 5

匹配任意一个数字

123abc345

[\d]*

123 345

匹配任意多个数字

123abc345

[\d]+

123 345

匹配任意多个数字

 分组()与或 | [^]

匹配15位或18位身份证,15位需都是数字组成,18位可以是数字或x结尾,首位都不能为0

待匹配字符串

正则表达式

匹配结果

说明

110621199012014599

^[1-9]\d{13,16}[0-9x]$

110621199012014599

可以匹配到一个正确的身份证,但是如果是16位1106211990120145也同样能匹配到,但是这并不是身份证

^[1-9]\d{14}(\d{2}[0-9x])?$

不会再匹配错误的身份证(你可以试试的)

110621199012014599

^([1-9]\d{16}[0-9x]|[1-9]\d{14})$

110621199012014599

这个是比较好的表达式,先匹配18位,再匹配15位

 总结:

  要想熟练的使用正则表达式,还是要多练多写吧! 希望大家能像计算1+1=2这么简单的使用正则表达式

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/03/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概念:
  • 目的?    
  • 符号: 
  • 字符:
  • 量词:
  • 实例:
    • 1.匹配任意数字
    • 2.匹配任意小写字母
    • 3.匹配任意大写字母
    • 4.匹配数字+小写字母+大写字母
    • 5.\w  与  \W与  [\w\W](匹配所有字符)
    • 7.\d  与  \D  与  [\d\D](匹配所有字符)
    • 8.\n  与  \t(tab制表符)  与  \b
    • 9.^(匹配一个字符串的开头)   与  $
    • 10.a|b(从左向右匹配,优先匹配a)
    • 11.[^...]
  • 组合练习:
    • *+?{}
    • 字符集[] [^]
  •  总结:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档