python正则表达式基础学习(一)

3 篇文章 0 订阅
1 篇文章 0 订阅

学习目标:

1.熟练使用正则表达式符号
2.正确组合和理解一般的正则表达式
3.能够使用python操作正则表达式


学习内容:

1.正则表达式

1.处理文本成为计算机常见工作之一
2.对文本内容的搜索提取是一项比较复杂困难的工作
3.为了快速方便处理上述问题,正则表达式技术诞生,主要发展为一个被众多语言使用的独立技术 。

2.正则表达式定义

定义:即高级文本匹配模式,提供了搜索,替代等功能。本质是由一系列特殊符号和字符组成的子符串,这个子符串即是正则表达式。 这个表达式描述了字符和字符的重复行为,可以匹配一类特征的字符串。

3.正则表达式特点

正则表达式特点
*方便进行检索和修改
*支持语言众多
*灵活多样
*mongo正则类型,django等框架作为url匹配,爬虫

4.正则表达式使用

re.findall(pattern,string)
功能:使用正则表达式匹配字符串
参数:pattern 正则表达式
string 目标字符串
返回值
示例代码:

In [1]: s="my email is lvze@tedu.cn"

In [2]: import re

In [3]: re.findall("\w+@\w+\.cn",s)
Out[3]: ['lvze@tedu.cn']

元字符 (即正则表达式中有特列含义的符号)
1.普通字符
元字符:abc
匹配规则:匹配相应的普通字符

In [9]: re.findall("abc","abcfhgabcadsfsaabca")
Out[9]: ['abc', 'abc', 'abc']

2.或
元字符: ab|cd
匹配规则:匹配|两达任意一个正则表达式符合的情况
注意:|两侧不要有没用的空格

In [10]: re.findall("ab|cd","abcdefhabcdhig")
Out[10]: ['ab', 'cd', 'ab', 'cd']

In [12]: re.findall("ab|bc","abcdaaaab")
#匹配一个后面不在匹配
Out[12]: ['ab', 'ab']

3.匹配单一字符
元字符 .
匹配规则:匹配除了换行之外的任意字符
f.o 可以匹配 foo fao f@o


In [13]: re.findall("f.o","foo is  not  fao")
Out[13]: ['foo', 'fao']
#任何字符都可以匹配,但只能匹配一个
In [14]: re.findall("你.","你好 你坏")
Out[14]: ['你好', '你坏']

4.匹配开始位置
元字符:^
匹配规则:匹配一个字符串的开始位置

In [15]: re.findall("^hello","hello world hello")
Out[15]: ['hello']
#只匹配一个hello,为开头hello

5.匹配结束位置
元字符:$
匹配规则:匹配目标字符串的结束位置

In [17]: re.findall("he$","adfasdfas,adsfsadaf,he")
Out[17]: ['he']

6.匹配重复
元字符: *
匹配规则:匹配前面的正则表达式重复0次式多次

In [18]: re.findall("ho*","ho,hoooo,hof,hoooooooooooooo,h")
Out[18]: ['ho', 'hoooo', 'ho', 'hoooooooooooooo', 'h']

7.匹配重复
元字符:+
匹配规则:匹配前面的正则表达式重复1次或多次

In [19]: re.findall("ab+","ab,a,abb,aba")
Out[19]: ['ab', 'abb', 'ab']

8.匹配重复
元字体无完肤 ?
匹配规则:匹配前面的正则表达式重复0次或1次

In [21]: re.findall("ab?","abcdefa")
Out[21]: ['ab', 'a']


9.匹配重复
元字符:{n}
匹配规则:匹配指定的重复次数
ab{3} 匹配 abbb


In [23]: re.findall("ab{5}","abbbbbbbb,abbbbbb")
Out[23]: ['abbbbb', 'abbbbb']


10.匹配重复
元字符:{m,n}
匹配规则:匹配前面的正则表达式重复m次到n次
ab{3,5} abbb abbbb abbbbb

In [24]: re.findall("ab{3,5}","abbbbbbbbbbbabbbbbbabbbbabbba
    ...: bb
Out[24]: ['abbbbb', 'abbbbb', 'abbbb', 'abbb']

11.匹配字符集合
元字符:[]
匹配规则:匹配括号范围内的任意一个字符
[abc123d] 可以匹配 a b c 1 2 3 d
[a-z] 小写26个字母
[A-Z] 大写26字母
[0-9] 数字0-9

In [25]: re.findall("[0-9]","hello word 123")
Out[25]: ['1', '2', '3']

12.匹配字符取反集合
元字符[^…]
匹配规则:匹配除指定字符集之外的任意字符

re.findall("[^abc]","nihao abc")
Out[2]: ['n', 'i', 'h', 'o', ' ']

13.匹配任意(非)数字字符
元字符: \d \D
匹配规则; \d 匹配任意数字字符 [0-9] \D匹配任意非数字字符 [^0-9]

re.findall("1\d{10}","1595061235,1545455455,15443134543434")
#匹配手机号规则
Out[3]: ['15443134543']

14.匹配(非)普通字符(普通字符:数字字母下划线)
元字符: \w \W
匹配规则:\w 匹配普通字符 \W 匹配非普通字符

re.findall("\W+","hello$$$ $$$helllo")
Out[6]: ['$$$ $$$']
re.findall("\w+","hello1 $")
Out[4]: ['hello1']

15.匹配(非)空字符
元字符:\s \S
匹配规则:\s 匹配任意空字符 [\n \t \r \0] \S匹配任意非空字符

re.findall("\s","asdfs aasd ss")
Out[7]: [' ', ' ']

re.findall("\S","asdfas asas sfsaf")
Out[8]: ['a', 's', 'd', 'f', 'a', 's', 'a', 's', 'a', 's', 's', 'f', 's', 'a', 'f']
re.findall("\s","aadas\n\r\t\0")
Out[9]: ['\n', '\r', '\t']
#小测验
#取出World China
re.findall("[A-Z]\S+","hello World nihao China ###")
Out[12]: ['World', 'China']

16.匹配起止位置
元字符:\A \Z
匹配规则 \A匹配开始位置 \Z匹配结置位置
绝对匹配 \Aabc\Z 匹配出abc (且字符串只是abc)

In [15]: re.findall("\A/\w+/\w+\Z","/azheng/saao")
Out[15]: ['/azheng/saao']

17.匹配(非)单词边界位置
元字符: \b \B
匹配规则: \b 匹配单词的边界 \B匹配非单词的边界

单词边界:数字字母下划线和其他字符的交界位置为单词的边界

In [18]: re.findall(r"\bis\b" ,"This is a test")
#r是源始字符串,让转义字符失效
Out[18]: ['is']
#匹配第一个is
In [22]: re.findall(r"\Bis\b" ,"This is a test")
Out[22]: ['is']

5.元字符总结:

匹配单个字符: a	.	\d	\D	\w	\W	\s 	\S  [...]		[^...]
匹配重复性 *   + ?  {n}    {m,n}
匹配某个位置:^    $   \A     \Z  \b  \B
其他: |  ()  \

6.简单练习

匹配长度8-10位的密码 必须以数字开头,数字字母下划线组成

In [23]: re.findall("^[0-9]\w{7,9}","1asdfs124")
Out[23]: ['1asdfs124']

学习时间:

1、2020年10月27日早

学习产出:

1、 技术笔记 1 遍 2、CSDN 技术博客 1 篇
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值