@python网络安全开发学习1
Python正则表达式
正则表达式是一个特殊的字符序列,它能够帮助你方便的检查一个字符串是否与某种模式匹配
一、RE模块
RE模块使python语言具有全部的正则表达式功能
常见的模块有:
compile(pattern) 创建模式对象
search(pattern,string) 在字符串中寻找模式
match(pattern,string) 在字符串开始处匹配模式
findall(pattern,string) 列表形式返回匹配项
sub(pat,repl,string) 替换字符串中的匹配项
split(pattern,string) 根据模式分割字符串
# compile方法和search方法
import re #导入模块
a = re.compile('hello,De Bruyne') #创建模式对象
b = a.search('hello,Owen,hello,De Bruyne...').group(0) #字符串中寻找,re_search返回的是匹配对象,如果要返回字符串,就得用group()方法
print(b)
返回 hello,De Bruyne
# compile方法和match方法
import re #导入模块
a = re.compile('hello,De Bruyne') #创建模式对象
b = a.match('hello,Owen,hello,De Bruyne...') #字符串开头寻找
print(b)
开头没有此字符串,返回 None
# findall方法
import re #导入模块
a = re.findall('hello,De Bruyne','hello,Owen,hello,De Bruyne...hello,De Bruyne...hello,De Bruyne') #findall方法匹配所有字符串返回列表形式
print(a)
返回为 [‘hello,De Bruyne’, ‘hello,De Bruyne’, ‘hello,De Bruyne’]
# sub方法
import re #导入模块
a = re.sub('hello,De Bruyne','A','hello,Owen,hello,De Bruyne...') #sub方法进行字符串中的替换
print(a)
返回 hello,Owen,A…
# split方法
import re #导入模块
a = re.split(',','hello,Owen,hello,De Bruyne...') #split方法进行字符串分割返回列表形式
print(a,b)
返回 [‘hello’, ‘Owen’, ‘hello’, ‘De Bruyne…’]
二、正则表达式匹配修饰符
| 修饰符 | 描述 |
|---|---|
| re.I | 使匹配对大小写不敏感 |
| re.L | 使本地化识别(locale-aware)匹配 |
| re.M | 多行匹配,影响^ 和 $ |
| re.S | 使.匹配包括换行在内的所有字符 |
| re.U | 根据Unicode字符集解析字符。这个标志影响\w,\W,\b,\B |
| re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解 |
eg1:
#先使用search匹配,
import re
a = re.search('a','ABCDEF').group(0) #大小写敏感匹配
print(a) #返回 None
b = re.search('a','ABCDEF',re.I).group(0) #加入修饰符re.I使得大小写不敏感,位置都在最后
print(b) #返回 A
三、正则表达式匹配模式
| 模式 | 描述 |
|---|---|
| ^ | 匹配字符串的开头 |
| $ | 匹配字符串的末尾 |
| . | 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符 |
| […] | 用来表示一组字符,单独列出:[awk]匹配’a’,‘m’或’k’ |
| [^…] | 不在[]中的字符:[^abc]匹配除了a,b,c之外的字符 |
| re* | 匹配0个或多个的表达式 |
| re+ | 匹配1个或多个的表达式 |
| re? | 匹配0个或1个有前面的正则表达式定义的片段,非贪婪模式 |
| re{n} | 精确匹配n个前面表达式。例如,o{2}不能匹配’'Bob"中的"o",但是能匹配"food"中的两个o |
| re{n,} | 匹配n个前面表达式。例如,o{2,}不能匹配"Bob"中的"o",但是能够匹配"foooood"中的所有o,"o{1,}“等价于"o+”。"o{0,}“等价于"o*” |
| re{n,m} | 匹配n到m次前面的正则表达式定义的片段,贪婪模式 |
eg1:
#使用^模式匹配
import re
a = re.findall('^abc','abcADEFabcghfG') #本来findall返回所有匹配的abc,这里使用^模式只匹配开头
print(a) #返回 ['abc']
eg2:
#使用.模式匹配
import re
a = re.findall('.','abcADEFabcghfG') #这里使用.模式匹配任意字符,返回所有字符列表
print(a) #返回 ['a', 'b', 'c', 'A', 'D', 'E', 'F', 'a', 'b', 'c', 'g', 'h', 'f', 'G']
eg3:
#使用re{n}匹配
import re
a = re.findall('.{2}','abcADEFabcghfG') #这里使用re{n}模式匹配,两个字符匹配返回列表
print(a) #返回 ['ab', 'cA', 'DE', 'Fa', 'bc', 'gh', 'fG']
| 特殊字符类 | |
|---|---|
| 实例 | 描述 |
| . | 匹配除"\n"之外的任何单个字符。要匹配包括’\n’在内的任何字符,请使用像’[.\n]'的模式 |
| \d | 匹配一个数字字符。等价于[0-9] |
| \D | 匹配一个非数字字符。等价于[^0-9] |
| \s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[\f\n\r\t\v] |
| \S | 匹配任何非空白字符,等价于[^\f\n\r\t\v] |
| \w | 匹配包括下划线的任何单词字符,等价于’[A-Za-z0-9_]’ |
| \W | 匹配任何非单词字符,等价于’[^A-Za-z0-9_] |
eg1:
#使用\d匹配
import re
a = re.findall('\d','abcADEFabcg0h1f23G') #这里使用\d模式匹配,匹配数字返回列表
print(a) #返回 ['0', '1', '2', '3']
eg2:
#使用\D匹配
import re
a = re.findall('\D','abcADEFabcg0h1f23G') #这里使用\D模式匹配,匹配非数字返回列表
print(a) #返回 ['a', 'b', 'c', 'A', 'D', 'E', 'F', 'a', 'b', 'c', 'g', 'h', 'f', 'G']
四、贪婪模式和非贪婪模式
正则表达式通常用于在文本中查找匹配的字符串。python里的数量词默认时贪婪的,意思是总是尝试匹配尽可能多的字符;
非贪婪模式则相反,总是尝试匹配尽可能少的字符
*?,+?,??,{m,n}?
前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?使其变成惰性匹配
eg1,正则表达式"ab*" 如果用于查找"abbbc",将找到"abbb"。而如果使用非贪婪方法"ab*?",将找到"a"
本文介绍了Python正则表达式的基础用法,包括RE模块的常用函数如compile、search、match、findall、sub和split,以及正则表达式的匹配模式、修饰符和特殊字符类。通过实例演示了大小写不敏感匹配、字符数量限制和正则表达式匹配的应用。
7578

被折叠的 条评论
为什么被折叠?



