【WebAPI自动化基础一】python中的正则表达式模块、常用正则举例

一、正则表达式基本定义

正则表达式,又称规则表达式(Regular Expression , RE),是计算机科学的一个概念;它描述了一种字符串匹配的模式,通过这样的模式对字符串进行搜索、匹配和替换等操作。下面我们就列举常规正则表达、字符搜索、字符替换及分割以及表达式修饰符进行简单描述。

二、常规正则表达式列举

通配符释义正则表达式举例匹配结果(可能出现)
xxx|yyy匹配正则表达式xxx或yyyxxx|yyyNone或者xxx或者yyy;
.匹配任何字符(\n除外)xxx.None或者xxx任意字符
^匹配字符串起始部分^aa……
$匹配字符串终止部分.txt$s.txt
*匹配0次或者多次出现前面的正则表达式a*……aaaaaa……
+匹配1次或者多次出现前面的正则表达式a+……aaaaaa……
匹配0次或者1次出现前面的正则表达式one?……one……
{N}匹配N次出现前面的正则表达式a*.c{2}……a[a-z]c……
{N,M}匹配N至M次出现前面的正则表达式a*.c{2,3}……a[a-z]cc……
[…]匹配字符集中的任意一字符[abc]匹配abc中的一个
[…x-y…]匹配x至y间的任意一字符[a-z]匹配a-z中的任一个
[^…]不匹配次字符集中的任意单个字符[^abc]匹配的结果不会包含abc
(…)匹配封闭的正则表达式,然后另存为子组([a-c][1-2])……c1……
\d匹配任何十进制数字\d1
\w匹配任何字母数字字符\w{3}12a
\s匹配任何空格字符b\sbb b
\b匹配任何单词边界  
\N匹配已保存的子组([0-9])\99
\.匹配“.”字符a\.txta.txt
常用正则表达式
正则表达式释义匹配内容
\d+(\.\d*)?任意整数和浮点数0.006 2 75
\b[^\Wa-z0-9_][^\WA-Z0-9_]*\b首字母只能大写Boo Foo
^http:\/\/([\w-]+(\.[\w-]+)+(\/[\w-.\/\?%&=\u4e00-\u9fa5]*)?)?$验证网址http://www.baidu.com/?id=1
^[\u4e00-\u9fa5]{0,}$验证汉字测试
\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*验证电子邮件example@163.com
^[1-9]([0-9]{16}|[0-9]{13})[xX0-9]$身份证110101195910231000
^13[0-9]{1}[0-9]{8}|^15[9]{1}[0-9]{8}手机号13000000000
^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$验证IP192.168.1.4
^[a-zA-Z0-9]+([a-zA-Z0-9\-\.]+)?\.s|)$验证域名baidu.com
^([a-zA-Z]\:|\\)\\([^\\]+\\)*[^\/:*?"<>|]+\.txt(l)?$ 验证文件路径C:\users\app
<(.*)>(.*)<\/(.*)>|<(.*)\/>HTML标签匹配 

三、字符搜索

python中关于RE模块对于字符的搜索常用的4个方法:match()、search()、findall()、finditer();match()是从字符串的开始进行匹配;而search()是对字符串的任意位置进行匹配;这两个均是只搜索匹配一处字符串;而findall()、finditer()是满足你需要匹配多处字符串时的函数;其中,findall()匹配结果返回的是一个List类型的数据,finditer()匹配结果返回的是一个迭代器;(finditer的性能要好于findall)另:span()可以取出匹配结果在匹配目标字符串中的索引;match()属性可以取出结果;如下图:

#!usr/bin/env python
# -*- coding:utf-8 -*-

import re

str000 = "Hello Tester,Good Tester!"
str0000 = "Tester is a good people!"
res0 = re.match("Tester", str000)
res1 = re.match("Tester", str0000)
print(res0)  # --->None
print(res1)  # ---><_sre.SRE_Match object; span=(0, 6), match='Tester'>
print(res1.group())  # --->Tester
######################################################################################
res00 = re.search("Tester", str000)
res01 = re.search("Tester", str0000)
print(res00)  # ---><_sre.SRE_Match object; span=(6, 12), match='Tester'>
print(res01)  # ---><_sre.SRE_Match object; span=(0, 6), match='Tester'>
print(res00.group())  # --->Tester
print(res01.group())  # --->Tester
######################################################################################
res000 = re.findall("Test..", str000)
print(res000)  # --->['Tester', 'Tester']
res001 = re.finditer("Test..", str000)
print(res001)  # ---><callable_iterator object at 0x0000019AC0F08B70>
# 分别打印两个Tester
for i in res001:
    print(i.group())

四、字符替换和分隔

替换:re.sub(正则,"替换值","目标字符串",n ),释义:从“目标字符串”中匹配“正则”,替换为“替换值”,替换次数为n次,次数可以不填,默认匹配的所有。

分隔:re.split(正则,"目标字符串",n),释义:从“目标字符串”中匹配“正则”,匹配的内容换成分隔符“,”,分隔次数n次,次数可以不填,默认匹配的全部。

#! usr/bin/env python
# -*-coding:utf-8 -*-
import re
str000="She is a beautiful girl ,she is good and honest."
#替换
print(re.sub(r"\w*is\w*","are",str000))#--->She are a beautiful girl ,she are good and honest.
print(re.sub(r"\w*is\w*","are",str000,1))#--->She are a beautiful girl ,she is good and honest.
#分隔
print(re.split(r"\w*is\w*",str000))#--->['She ', ' a beautiful girl ,she ', ' good and honest.']
print(re.split(r"\w*is\w*",str000,1))#--->['She ', ' a beautiful girl ,she is good and honest.']

五、表达式修饰符

表达式修饰符
re.I(re.IGNORECASE)忽略大小写
re.M(re.MULTILINE)多行模式,改变“^”和“$”的行为
re.S(re.DOTALL)点任意匹配模式,改变“.”的行为,设置后可以匹配\n
re.L(re.LOCALE)使预定字符类\w\W\b\B\s\S取决于当前区域设定
re.U(re.UNICODE)使预定字符类\w\W\b\B\s\S\d\D取决于unicode定义的字符属性
re.X(re.VERBOSE)详细模式。该模式下正则表达式可以是多行,忽略空白字符,并可以加入注释
表达式修饰符使用方式
re.compile(pattern,string,flags=表达式修饰符)flags可以不填,但填了就要按照修饰符设置的意义来匹配
re.findall(pattern,string,flags=表达式修饰符)
re.match(pattern,string,flags=表达式修饰符)
re.search(pattern,string,flags=表达式修饰符)
import re
str000="She is a beautiful girl ,she is good and honest."

res=re.findall(r"\W*she\W*",str000,flags=re.I)##['She', 'she']

六、预编译、贪婪匹配

前面所表述的匹配都没有预编译,RE的预编译指的是对pattern内容进行预编译,其作用是减少匹配时编译pattern的次数,从而提高匹配性能。贪婪匹配,默认情况下,都是贪婪匹配;指的是在默认情况下对于复数匹配符来说,他们会尽可能的匹配到最后一个符合条件的字符。而对非贪婪匹配,则是匹配到第一个符合条件的字符即可。

备注:非贪婪匹配模式中的“?”必须放在复数匹配符后面,同时在被限定字符前面;复数匹配符可以是“*”或“+”

#! usr/bin/env python
# -*-coding:utf-8 -*-
import re
str000="She is a beautiful girl ,she is good and honest."

pattern="\w*she\w*"
p=re.compile(pattern,flags=re.I)
res=p.search(str000)

str0000="<html><head></head></html>"
print(re.search(r"^<.*>",str0000).group())##<html><head></head></html>
print(re.search(r"^<.*?>",str0000).group())##<html>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷凝娇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值