Python re 正则表达式

为什么使用正则表达式

我在测试工作中主要在jmeter 提取器,cucumber feature文件,网络爬虫对接口响应的处理等方面使用到了正则。
如不使用正则可以使用硬编码的方式解决问题,比如需要从一个文本中把手机号提取出来,可以根据手机号前后的文本特性使用str相关函数处理,但是相比于正则,硬编码方式处理相对麻烦,手机号码前后一旦出现其他非数字字符需要增加判断逻辑。使用正则表达式只需要更改匹配原则,减少代码冗余。

re常用语法

  1. re.compile 建立配置对象,结合search和findall使用
  2. re.search 搜寻第一个匹配结果返回,语法规则为re.search(pattern,string)
  3. re.findall 搜寻所有匹配结果返回,语法规则为re.findall(pattern,string)
  4. group 获取搜寻结果的分组

以下是简单示例:

    # 被搜寻的文本
    a = 'liajglaiwe<td> 9875982074564236 <td>fasegfeawgfea<td> testtr<td> <td> 9843698274369868532 <td>'
    """re.complie结合search和findall使用"""
    # 使用compile处理匹配原则
    # search_num=re.compile(r'<td> (\d*) <td>')
    # 根据匹配原则找到所有符合的结果
    # result=search_num.findall(a)
    # 根据匹配原则找到第一个符合的结果,因为有()进行分组,需要取出来第一个分组
    # result=search_num.search(a).group(1)
    """直接使用search或者findall"""
    # 不需要compile
    # result=re.findall(r'<td> (\d*) <td>',a)
    result = re.search(r'<td> (\d*) <td>', a).group(1)
    print(result)

re其他语法

1.re.search和re.findall函数可以添加第三个参数flag
1. flag为re.I即re.findall(pattern,msg,re.I)代表搜寻时忽略大小写
2. flag为re.VERBOSE即re.findall(pattern,msg,re.VERBOSE) 可以在匹配规则中为正则表达式添加注释
3. flag为re.DOTALL即re.findall(pattern,msg,re.DOTALL),没有re.DOTALL不匹配换行字符\n,有了之后所有字符都能匹配
4. 如果想使用多个flag可以添加管道,如re.findall(pattern,msg,re.VERBOSE|re.DOTALL|re.I)
如下为re.DOTALL示例:

>>> a = """\
... 123abc456jkl
... www.pynote.net
... 889977yyuupp
... !@#$%^&*()
... asdfasdf
... """
>>> re.findall('\d+.+', a)
['123abc456jkl', '889977yyuupp']
>>> re.findall('\d+.+', a, re.DOTALL)
['123abc456jkl\nwww.pynote.net\n889977yyuupp\n!@#$%^&*()\nasdfasdf\n']
>>> re.findall('\d+.+!', a, re.DOTALL)
['123abc456jkl\nwww.pynote.net\n889977yyuupp\n!']
  1. re.sub(pattern,newstr,msg) 在文本中搜寻匹配的字符并替换为newstr返回
  2. re.match() 与re.search功能类似,re.match是搜寻对比字符串开始的字,re.search是搜寻整个字符串
  3. 对搜寻结果的处理
方法说明
group()可传回搜寻到的字符串
end()可传回搜寻到的字符串的结束位置
start()可传回搜寻到的字符串的起始位置
span()可传回搜寻到的字符串的(起始,结束)位置

元字符

符号功能
\\ 转义字符,将后边紧跟着的字符变成特殊字符,或将后边的特殊字符变成普通字符 如:在正则表达式中,“\n"换行符,”\“则代表一个普通字符”"
^匹配第一行行首,匹配多行需要传参 flags=re.MULTILINE
$匹配最后一行行尾,匹配多行需要传参 flags=re.MULTILINE
.除"\r"“\n"外,匹配任意的单个字符,要使”."匹配换行符,flags=re.DOTALL
|或,如 “aaa|bbb|ccc”,表示"aaa",“bbb”,"ccc"三选一
?匹配前边的子表达式0次或1次,等价于{0,1}
+匹配前边的子表达式1次或多次,等价于{1,}
*匹配前边的子表达式0次或多次,,等价于{0,}
{}{n}匹配前边的子表达式n次,{n,}匹配前边的子表达式至少n次 即:>= n,{n,m}匹配前边的子表达式n~m次,即:n<= 表达式 <=m
()分组,从1开始,从左至右数"("为第几组,下标0为全部分组
[]代表对字符进行分类,对[ ]中的一个字符匹配,[ ]中只有"^“,”-“,”“三个特殊字符,其中”"代表转义字符,其它的都代表原本普通的字符,如:[.]只是一个普通的点字

字符分类示例

  1. [abc] : 代表字符集匹配[]中的一个字符,a",“b”,"c"三选一
  2. [a-z] :表示a到z任意一个字符
  3. [A-Z] : 表示A-Z任意一个字符
  4. [2-5] : 表示2-5任意一个数字
  5. [^abc]:除"a",“b”,"c"外的任意字符

特殊字符表

字符使用说明
\d0~9的整数字元
\D除了0~9的整数字元以外的其他字符
\s空白、定位、Tab键、换行、换页字符
\S除了空白、定位、Tab键、换行、换页字符以外的其他字符
\w数字、字母和底线字符,[A-Za-z0-9_]
\W除了数字、字母和底线字符,[A-Za-z0-9_]以外的其他字符
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值