#CSDN21天学习挑战赛#Python入门之正则表达式-学习笔记(1)

学无止境!今天开启一段新的学习征程,希望往后余生会感恩今天的坚持!

活动地址:CSDN21天学习挑战赛

这是我正式学习Python的第一天,将所读、所思、所惑/获、所感记录于此,让CSDN见证一枚Python小白的成长历程。由于使用的工具是mac,首先让自己养成编写脚本的好习惯,文件开头编写如下代码,以便后续运行:

#!/usr/bin/env python3

注意:Python对中英文输入敏感,一旦编写代码过程中混入中文字符就会报错!引号“”内的内容除外。

**

学习日记

**
一、正则表达式学习要点()

1、什么是正则表达式?

正则表达式(Regular expression)是一个特殊的用于处理字符串的模式,以便检查字符串是否与我们定义的字符序列的某种模式相匹配。最简单的正则表达式为普通字符串,匹配自身,如正则表达式"Python"与字符串"Python"匹配。

2、Python中什么时候用正则表达式?

爬虫爬取数据、数据开发、文本检索和数据筛选时常用正则表达式来检索字符串。正则表达式内嵌于python中,通过 import re 模块调用。

3、正则表达式的模式元素

正则表达式通常包含反斜杠(\),它在常规字符串中对字符进行转义(例如“\n”表示换行),如果字符串中包含反斜杠最好使用原始字符串(不以特殊方式处理反斜杠)来表示(如r'\')。模式元素匹配相应的特殊字符。模式语法中的特殊元素表示特殊的含义,但如果使用模式的同时提供了可选标志参数,某些模式元素的含义会改变。

4、修饰符-可选标志

正则表达式可以包含一些可选择修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以按位通过OR或|来指定。如re.I|re.M被设置成I和M标志。

5、运算符优先级

正则表达式从左到右进行计算,并遵循优先级顺序,\是转义符,运算级最高,其次是圆括号和方括号(()、(?:),(?=),[]),然后是限定符(*、+、?、{n}、{n,}、{m,n})、最后是定位点和序列(^、$、\任何元字符、任何字符)。

6、re模块:python中通过正则表达式对字符串进行匹配时的一个模块。

①re模块的使用过程:导入模块->调用函数->……

示例:调用re.match(pattern,string,flags=0)以匹配'itcast'开头的语句。

#导入re模块
>>> import re
#调用match函数进行字符串匹配
>>> result = re.match("itcast","itcast.cn")
#使用group函数提取数据
>>> result.group()
'itcast'

 ②利用正则表达式进行单字符匹配

#.的用法,匹配任意字符
>>> import re
>>> result = re.match(".","M")
>>> print(result.group())
M
#[]的使用,匹配方括号内的任一字符
>>> result = re.match("h","hello,python")
>>> print(result.group())
h
>>> result = re.match("H","Hello,python")
>>> print(result.group())
H
>>> result = re.match("[hH]","Hello,python")
>>> print(result.group())
H
>>> result = re.match("[hH]ello,python","Hello,python")
>>> print(result.group())
Hello,python
>>> result = re.match("[0-9]Hello,python","7Hello,python")
>>> print(result.group())
7Hello,python
#下面这个正则表达式中不能匹配4,因此result为None
>>> result = re.match("[0-58-9]Hello,python","7Hello,python")
>>> print(result.group())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
#\d的用法,匹配数字
>>> result = re.match("嫦娥\d号","嫦娥1号发射成功")
>>> print(result.group())
嫦娥1号
#\D的使用,匹配非数字
>>> result = re.match("嫦娥1\D","嫦娥1号发射成功")
>>> print(result.group())
嫦娥1号


③利用正则表达式进行多个字符匹配

#*的用法,匹配前一个字符出现0,1,多次,即可有可无
>>> import re
#下面一行代码中的正则表达式"[A-z][a-z]*"表示第一个字母为大写字母,紧(不)跟小写字母,即小写字母可有可无。第一个字母是小写,则报错
>>> result = re.match("[A-Z][a-z]*","nMM")
>>> print(result.group())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
#第一个字母是大写,后面无小写字母,则输出第一个字母
>>> result = re.match("[A-Z][a-z]*","MM")
>>> print(result.group())
M
>>> result = re.match("[A-Z][a-z]*","MMabcdeM")
>>> print(result.group())
M
#第一个字母是大写,后面有小写字母,则输出第一个字母和后面所有的小写字母
>>> result = re.match("[A-Z][a-z]*","MabcdeM")
>>> print(result.group())
Mabcde

# +的用法,匹配出前一个字符出现1次或者无数次,即至少1次
>>> names=["name1","_name","2_name","_name_"]
#正则表达式”[a-zA-Z_]+[\w]*"表示前面所有的字母和下划线至少出现1次,后面的字母、数字和下划线可有可无
>>> for name in names:
...     result = re.match("[a-zA-Z_]+[\w]*",name)
...     if result:
...         print ("变量名 %s 符合要求" % result.group())
...     else:
...         print("变量名 %s 非法" % name)
... 
变量名 name1 符合要求
变量名 _name 符合要求
变量名 2_name 非法
变量名 _name_ 符合要求

# ?的用法,匹配前一个字符出现1次或0次,即要么有1次,要么没有
#正则表达式"[1-9]?[0-9]"表示匹配0-99之间的数字
>>> result = re.match("[1-9]?[0-9]","7")
>>> print(result.group())
7

#{m}及{m,n}的用法,匹配前一个字符出现m次/出现m到n次
>>> passpowers = ["12a45678g","123_123","1234a_1234","1234_abcd_1234","123456_abcdef_123456","1234567_abcdefg_1234567"]
#正则表达式“[a-zA-Z0-9_]{8,20}”表示8到20位的大小写字母、数字、下划线,也可以写成"[\w]{8,20}"
>>> for passpower in passpowers:
...     result = re.match("[a-zA-Z0-9_]{8,20}",passpower)
...     if result:
...         print ("密码 %s 符合要求" % result.group())
...     else:
...         print("密码 %s 不符合要求" % passpower)
... 
密码 12a45678g 符合要求
密码 123_123 不符合要求
密码 1234a_1234 符合要求
密码 1234_abcd_1234 符合要求
密码 123456_abcdef_123456 符合要求
密码 1234567_abcdefg_1234 符合要求

④匹配开头和结尾

 

今天学习暂时结束,明天继续学习正则表达式。

二、学习中遇到的问题

正则表达式"[a-zA-Z_]+[\w]*"表示➕前面的大小写字母及下划线至少出现1次,➕后面的字母、数字、下划线可有可无,这样理解是否正确?

三、学习总结

第一天正式学习python,会感觉有一点吃力,跟着【无 羡ღ】老师的步伐一步一演练,一步一思考,虽然进度很慢,但心中踏实。持之以恒,定有收获!感谢 【无 羡ღ】老师给予这次学习机会!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值