从0开始学正则表达式-基于python
2017-05-10 06:10 zouhui 阅读(266) 评论(0) 编辑 收藏 举报关于正则表达式,当我们了解它就不难,不了解就很难,其实任何事情都是这样,没有人一生下来就啥都会,说白了,每个人都是一个学习了解进步的过程。学习和掌握正则表达式可能并不是太简单,因为它确实是有点像“外星语”。
为什么要用正则表达式
市面上很早就有关于正则表达式的专业技术书记,在软件开发、性能测试、自动化测试、测试开发中都可以看到正则表达式优美的舞姿。
对于静态文本内容, 因为有提供与预期的搜索结果匹配的确切文本内容,典型的搜索和替换操作已经足够了,但它缺乏灵活性。如果要搜索动态内容,这就变得很困难,而正则表达式能很简洁强大的解决这一相关问题。
总而言之、言而总之,我们使用正则表达式可以很方便的过滤、筛选出需要的特定数据信息。
正则表达式字符串匹配
"^\d+$" //非负整数(正整数 + 0)
"^[0-9]*[1-9][0-9]*$" //正整数
"^((-\d+)|(0+))$" //非正整数(负整数 + 0)
"^-[0-9]*[1-9][0-9]*$" //负整数
"^-?\d+$" //整数
"[x{4e00}-x{9fa5}]+/u //匹配汉字中文
“^d{15}|d{}18$” // 身份证号(15位或18位数字)
“^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$ // 手机号
"^(-?\d+)(\.\d+)?$" //浮点数
"^[A-Za-z]+$" //由26个英文字母组成的字符串
"^[A-Z]+$" //由26个英文字母的大写组成的字符串
"^[a-z]+$" //由26个英文字母的小写组成的字符串
"^[A-Za-z0-9]+$" //由数字和26个英文字母组成的字符串
"^\w+$" //由数字、26个英文字母或者下划线组成的字符串
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日
"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil
"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址
"(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?" //电话号码
"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$" //IP地址
^[-+]?\d+(\.\d+)?$ //值类型正则表达式
正则表达式实例1
token在app登录后,相当于一个凭条,代表了该用户的唯一通行证,放到header里面传递到另外的接口。
---------接口以及返回的响应数据如下:---------
http://192.168.215.55/user/login.do?phone=13798359580&pwd=123456
{"msg":"成功","data":{"birthday":"","sex":"0","cityId":"4524157","userLogo":"","provinceId":"4524130","token":"p:sid:e3f9ff89eaf74a3ba208aa6ba74d00a44043","niceName":"test1234567","provinceName":"广东"},"state":0}
调用如下包含正则表达式的汗数,则可以得到token为
p:sid:e3f9ff89eaf74a3ba208aa6ba74d00a44043
------------基于python的函数如下----------
def GetToken(): #取用户登录的token值
global token #定义token全局变量
url ='http://'+HOSTNAME+'/buyer/user/login.do' #接口的url
params ={
'phone': '13798359580',
'pwd': '123456',
} #参数为登录手机号和密码
request =urllib2.Request(url = url, data = urllib.urlencode(params)) #发送接口请求url和参数
response= urllib2.urlopen(request) #返回响应数据
data =response.read() #返回响应数据
regx ='.*"token":"(.*)","ud"' #正则表达式toekn,左匹配 "token":" 右匹配","ud"'
pm =re.search(regx, data) #取token匹配值
token =pm.group(1) #如果匹配到则返回token值
returnFalse
正则表达式实例2
购物提交订单时会生成一个订单编号,那么接口自动化测试时,要根据这个订单编号去进行支付等。这时要动态取值,即用到正则表达式去动态匹配需要的这个订单编号。
---------接口以及返回的响应数据如下:---------
http://192.168.215.55/buyer/cart/submit.do?goodsids=20394
{"msg":"成功","data":{"goodsStatusResult":1,"receiverInfo":{"id":"661","name":"test123","province":"4524130","city":"4524157","district":"4524163","defaultDeliverySeq":"1","preOrderSN":"1000160_240_1","toHome":"0"}],"totalFee":"359.00","totalCount":"1"}],"receipt":{"type":"2","typeName":"公司","title":"test","receiptId":"70","receiptContent":""},"activityList":[{"activityId":"0","activityName":"默认"}]},"state":0}
调用如下包含正则表达式的汗数,则可以得到preOrderSN为
1000160_240_1
------------基于python的函数如下----------
#预提交订单参数取动态值,订单编号preOrderSN,引用时比如strinfo = re.compile('{preOrderSN}')
#-------------------------------。
def preOrderSN(results):
global preOrderSN
#-预提交订单取值的正则表达式,左匹配"preOrderSN":" 右匹配"toHome"
regx ='.*"preOrderSN":"(.*)","toHome"'
pm =re.search(regx, results)
#-------------------------------。
if pm:
#------如果匹配到则转换为中文并返回值-----------
preOrderSN = pm.group(1).encode('utf-8')
return preOrderSN
#-------------------------------。
returnFalse