python初学者日记02(正则表达式)

Posted 好望角的那只鸵鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python初学者日记02(正则表达式)相关的知识,希望对你有一定的参考价值。

写作时间:2018/12/17

 

作者:永远的码农(博客园)




 

一.正则表达式简介:

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

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

正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。

 二.python正则表达式中的特殊字符以及转义字符的用法

     特殊字符                                                      描述                                                     
      ^ 表示匹配的字符必须在最前面
      $ 与^类似,匹配最末的字符
      * 匹配*前面的字符0次或n次
      + 匹配+前面的字符1次或n次
      ? 匹配?前面的字符0次或1次
      . 匹配除了 外的所有字符
     (x) 匹配x并且记录匹配的值
     x|y 匹配x或者y
     {n} n是正整数,匹配前面的n个字符
     {n,} 匹配前面至少n个字符
     {n,m} 匹配前面至少n个至多m个字符
     [xyz] 匹配列表中列出的任一字符,可以用连字符 - 指出字符范围
     [b] 匹配一个空格
     b 匹配一个单词的分界线,比如一个空格
     B 匹配一个单词的非分界线

 

 

 

 

 

 

 

 

 

 

 

 

   转义字符                                                     描述                             
    d 匹配数字,即0-9
    D 匹配非数字
    s 匹配空白,比如空格,tab
    S 匹配非空白
    w 匹配非特殊字符,即a-z、A-Z、0-9、_、汉字
    W 匹配特殊字符,即非字母、非数字、非汉字、非_

 

 

 

 

  

 

 

 

 

 

 

 

 

 

 

 

 

初级正则表达式常见使用:

1.匹配有效的正整数

 正则表达式:  [1-9]+[0-9]*

典例: 找出一个文本文件中所有有效的正整数(00123这样的视为无效,12300视为有效)

先创建一个文本文件new.txt,内容如下:

aaddccbbee 0012300 45600 78909
abcd1234efgh 12340 ghijkl
12 34 056 780 0099
12340056aabbcc00
1 import re
2 file = open("new.txt")
3 for line in file:
4     list = re.findall("[1-9]+[0-9]*",line)
5     print("findall()返回列表为:",list)
6     for num in list:
7         print(num)
执行结果:
findall()返回列表为: [12300, 45600, 78909]
12300
45600
78909
findall()返回列表为: [1234, 12340]
1234
12340
findall()返回列表为: [12, 34, 56, 780, 99]
12
34
56
780
99
findall()返回列表为: [12340056]
12340056

2.匹配有效的负整数

正则表达式: -[1-9]+[0-9]*

3.匹配有效的整数

正则表达式: -?[1-9]+[0-9]*|0

4.匹配浮点数

正则表达式: -?[0-9]+.[0-9]+

典例: 找出文本文件new.txt中的所有浮点数

文本文件内容如下:

aaddccbbee 456 078 -7780 9.99654
abcd1234efgh -12340 ghijkl 33.0
12 -34 056 780 0099 -2 0 2.23 -3.8
12340056aabbcc0.123
1 import re
2 file = open("new.txt")
3 for line in file:
4     list = re.findall("-?[0-9]+.[0-9]+",line)
5     print("findall()返回列表为:",list)
6     for num in list:
7         print(num)
执行结果:
findall()返回列表为: [9.99654]
9.99654
findall()返回列表为: [33.0]
33.0
findall()返回列表为: [2.23, -3.8]
2.23
-3.8
findall()返回列表为: [0.123]
0.123

5.匹配由数字、26个英文字母组成的字符串

正则表达式: [0-9a-zA-Z]+

高级正则表达式常见使用:

1.输入用户名只能是汉字,且字数位于3~10之间

正则表达式: ^[u4e00-u9fa5]{3,10}$

典例:验证用户输入名是否满足如上要求

1 import re
2 input = input("请输入用户名:")
3 if re.match("^[u4e00-u9fa5]{0,}$",input):
4     print("用户名有效")
5 else:
6     print("用户名无效")
测试效果:
请输入用户名:王老二 用户名有效 请输入用户名:张三 用户名无效 请输入用户名:lyj来了喔 用户名无效

2.输入密码开头必须是英文字母,其他部分只能是数字,下划线_或字母,且长度为6~12位

正则表达式: [a-zA-Z]{1}[a-zA-Z0-9_]{5,11}

3.电子邮箱验证

正则表达式: ^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$

 正则表达式并不是唯一的,不同的正则表达式可以达到相同的匹配要求......

本人也是初学python,这篇随笔其中有的地方肯定有不好的地方,如果你有什么建议或发现什么错误,欢迎在下面评论区提出,如果你觉得鄙人写得还不错,请各位客官动动小手点个推荐??吧!


 


以上是关于python初学者日记02(正则表达式)的主要内容,如果未能解决你的问题,请参考以下文章

统计师的Python日记第九天:正则表达式

给初学者的 Python 建议。正则表达式,字典等?

通过 Java 正则表达式提取 semver 版本字符串的片段

循环通过 python 正则表达式匹配

Python初学者

正则表达式日记