网站是怎样建立的流程是什么,江西省赣州市事业单位招聘信息,网页制作的公司怎么注册,成都微信网站开发【一】正则表达式
【1】说明
正则表达式是一种强大的文本匹配和处理工具#xff0c;主要用于字符串的模式匹配、搜索和替换。正则表达式测试网址#xff1a;正则表达式在线测试 正则表达式手册#xff1a;正则表达式手册
【2】字符组
字符转使用[]表示#xff0c;并在…【一】正则表达式
【1】说明
正则表达式是一种强大的文本匹配和处理工具主要用于字符串的模式匹配、搜索和替换。正则表达式测试网址正则表达式在线测试 正则表达式手册正则表达式手册
【2】字符组
字符转使用[]表示并在方括号内列出允许匹配的字符字符组中的字符之间的顺序没有特定意义他们是等效的匹配字符组其中的任意一个字符
1常用字符组
正则–字符组说明[aeiou]匹配任意一个小写元音字母[0123456789]匹配任意一个数字[0-9]匹配任意一个数字[a-z]匹配任意一个小写字母[a-zA-Z]匹配任意一个字母[0-9a-zA-Z]匹配任意一个字母或者数字
【3】元字符
正则表达式中的元字符是具有特殊含义的字符它们不仅仅匹配自身还具有一些特殊的功能
1常用元字符
正则–元字符说明·匹配任意一个除换行符\n以外的字符要匹配包括“\n”在内的任何字符请使用像“(.\w匹配任意一个字母、数字或下划线[A-Za-z0-9_]\W匹配任意一个非字母、数字或下划线[^A-Za-z0-9_]\s匹配一个空白符(包括空格、制表符、换页符等)[ \f\n\r\t\v]\S匹配一个非空白符(包括空格、制表符、换页符等)[^ \f\n\r\t\v]\d匹配任意一个数字[0-9]\D匹配任意一个非数字[^0-9]\t匹配一个制表符[\t]\b匹配一个单词的结尾py\b可以匹配main.py的结尾py但是不能匹配python的pya|b匹配字符a或字符b()匹配括号内的表达式也表示一个组[…]匹配字符组中的字符[^…]匹配除了字符组中字符的所有字符
【4】量词
正则表达式中的量词用于指定一个模式中某个元素的匹配次数
1常用量词
正则–量词说明*重复零次或更多次重复一次或更多次?重复零次或一次{n}重复n次{n,}重复n次或更多次 贪婪匹配优先匹配多次{n,m}重复n次到m次贪婪匹配优先匹配m次
【5】位置
正则表达式中的量词用于指定一个模式中某个元素的位置
1常用位置
正则–量词位置说明^匹配字符串的开始$匹配字符串的结尾
【6】分组匹配 在正则表达式中分组是用小括号 () 括起来的部分它允许你将一组字符当作一个单独的单元来处理 例如 (abc){2,4} 表示匹配连续出现 2 到 4 次的 abc
【7】转义符
在正则表达式中转义字符用于取消字符的特殊含义使其变成普通字符例如在正则表达式中. 表示匹配任意字符。如果你想匹配实际的点号需要使用 \.
【8】模式修正符
正则表达式的模式修正符是一种在正则表达式模式中添加修正标志以改变匹配规则的方式。修正标志通常以字母形式添加到正则表达式的末尾用于调整匹配的方式。
值说明re.I是匹配对大小写不敏感re.L做本地化识别匹配re.M多行匹配影响到^和$re.S使.匹配包括换行符在内的所有字符re.U根据Unicode字符集解析字符影响\w、\W、\b、\Bre.X通过给予我们功能灵活的格式以便更好的理解正则表达式
【二】re模块
【1】编译正则表达式compile
正则表达式编译之后会生成一个正则表达式对象该对象可以被访问多次避免了在每次匹配时都重新解析正则表达式
re.compile(pattern, flags0)# pattern 正则表达式
# flags 用于指定匹配模式修正符import repattern re.compile(r\d)
print(pattern, type(pattern))
# re.compile(\\d) class re.Pattern
【2】查找结果findall
所有满足匹配结果的内容返回一个列表避免了在每次匹配时都重新解析正则表达式
re.findall(pattern, string, flags0)# pattern 正则表达式
# string 待匹配字符串
# flags 用于指定匹配模式修正符import repattern re.compile(r\w)
text my name is bruce
res re.findall(pattern, text)
print(res)
# [my, name, is, bruce]
注意存在子组时 将只返回子组内容 需要使用非捕获分组(?:...)
import repattern re.compile(r\d(qq|163).com)
text 15846354qq.com
res re.findall(pattern, text)
print(res)
# [qq]pattern re.compile(r\d(?:qq|163).com)
text 15846354qq.com
res re.findall(pattern, text)
print(res)
# [15846354qq.com]【3】查找结果search
搜索第一个第一个第一个匹配成功的对象返回一个对象为空则返回None不像findall一样存在子组的问题
re.search(pattern, string, flags0)# pattern 正则表达式
# string 待匹配字符串
# flags 用于指定匹配模式修正符注意匹配对象的方法和属性
group() # 匹配的结果字符串
start() # 匹配成功的起始位置从0开始
end() # 匹配成功的结束位置结束的后一个位置
span() # 元组形式开始和结束位置import repattern re.compile(r\d)
text age is 18
res re.search(pattern, text)
print(res, type(res)) # re.Match object; span(7, 9), match18 class re.Match
print(res.group()) # 18
print(res.start()) # 7
print(res.end()) # 9
print(res.span(), type(res.span())) # (7, 9) class tuple【3】查找结果match
match和search基本相同不同点 match从字符串开头位置开始匹配search在整个字符串中搜索第一个匹配结果
import repattern1 re.compile(r\w)
pattern2 re.compile(r\d)
text age is 18
res re.match(pattern1, text)
print(res) # re.Match object; span(0, 3), matchage
res re.match(pattern2, text)
print(res) # None
【4】切割split
用于根据正则表达式模式分割字符串返回一个由分割后的子字符串组成的列表
re.split(pattern, string, maxsplit0, flags0)# pattern 正则表达式
# string 待匹配字符串
# maxsplit 指定最大分割次数0表示不限制从前往后开始切分
# flags 用于指定匹配模式修正符import repattern re.compile(r\d)
text aafa121ada021da12da
res re.split(pattern, text)
print(res) # [aafa, ada, da, da]
res re.split(pattern, text, maxsplit1)
print(res) # [aafa, ada021da12da]注意存在子组时 子组的内容也将保留在列表中 使用非捕获分组(?:...)将不会保存在列表中
import repattern re.compile(r(qq|163))
text 15846354qq.com
res re.split(pattern, text)
print(res)
# [15846354, qq, .com]pattern re.compile(r(?:qq|163))
text 15846354qq.com
res re.split(pattern, text)
print(res)
# [15846354, .com]【5】替换sub
在字符串中替换正则表达式模式的匹配项 默认替换
re.sub(pattern, repl, string, count0, flags0)# pattern 正则表达式
# repl 替换匹配项的字符串或可调用对象
# string 待匹配字符串
# count 指定最大替换次数0表示不限制从前往后开始替换
# flags 用于指定匹配模式修正符import repattern re.compile(r\d)
text age is 18
res re.sub(pattern, 20, text)
print(res)
# age is 20了解repl是可调用对象 将只返回子组内容 需要使用非捕获分组(?:...)
import redef to_upper(match):return match.group().upper()
text apple banana cherry date
pattern re.compile(r\b\w{6}\b) # 匹配长度为6的单词
result pattern.sub(to_upper, text)
print(result) # apple BANANA cherry datedef replace_adjacent(match):word match.group()return f{word} {word.upper()}
text apple banana cherry date
pattern re.compile(r\b\w{6}\b) # 匹配长度为6的单词
result pattern.sub(replace_adjacent, text)
print(result) # apple apple BANANA cherry date【6】替换subn
sub和subn基本相同不同点 sub返回替换后的字符串sunb返回一个包含替换后的字符串和替换次数的元组
import repattern re.compile(r\d)
text age is 18, money 50
res re.subn(pattern, 20, text)
print(res)
# (age is 20, money 20, 2)【7】切割finditer
用于在字符串中查找正则表达式模式的所有匹配项返回一个迭代器
re.finditer(pattern, string, flags0)# pattern 正则表达式
# string 待匹配字符串
# flags 用于指定匹配模式修正符import repattern re.compile(r\d)
text age is 18, money 50
res re.finditer(pattern, text)
print(res, type(res))
for i in res:print(i)
# callable_iterator object at 0x000002A4EC860D90 class callable_iterator
# re.Match object; span(7, 9), match18
# re.Match object; span(17, 19), match50【三】常用正则表达式
匹配内容正则表达式邮箱地址^[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}$URL^(https?匹配日期年-月-日^\d{4}-\d{2}-\d{2}$匹配手机号码^1[3456789]\d{9}$匹配身份证号码^\d{17}[\dXx]IP 地址/((2[0-4]\d匹配整数或浮点数^[-]?[0-9]*\.?[0-9]$Unicode编码中的汉字范围/^[\u2E80-\u9FFF]$/
【四】练习
获取金额最小两位小数
import redef get_money():while True:money input(请输入金额(最小单位0.01):).strip()pattern re.compile(r^\d(\.\d{1,2})?$)res re.match(pattern, money)if not res:print(f输入内容{money}不合法请输入)continuereturn moneyprint(get_money())