首页 > 其他分享 >正则re

正则re

时间:2022-09-19 11:22:42浏览次数:41  
标签:匹配 ret re 正则 分组 内容 group

import re

1,站长之家正则表达式
http://tool.chinaz.com/regex
2.什么是正则表达式
一套规则,匹配字符串的,只能操作字符串
#能做什么
1,检测一个输入的字符串是否合法
2.从一个大文件中找到所有复核规则的内容
字符组[]
一个中括号只匹配一个字符位置
[0-9]根据ascii进行范围进行匹配
[a-z]
[A-Z]
[a-zA-Z]大小写
[0-9a-z]
[0-9a-z-A-Z_] 数字字母下划线,但是比较麻烦
#####
在正则表达式中能够帮助我们表示匹配的内容的符号都是正则中的元字符
[0-9] -> \d 表示匹配一位任意数字 digit
0-9a-z-A-Z_] 数字字母下划线,但是比较麻烦可以用 \w 表示 word
空白(空格/tab/enter/)--》( /\t/\n) \s统一代替
空格 --> 后面这里有空格,看不见而已
tab --> \t
enter --> \n
空格,tab和回车---》 \s 代替
\W 非数字字母下划线
\D 只要不是数字,就能匹配上
\S 非空白
[\d\D] [\w\W] [\s\S]匹配所有
. 匹配除了换行符之外的所有
但是想用.匹配换行符,可以设置一下,flags=re.S
匹配html文件中(.*?)用的比较多
[^] 非
[^\d] 匹配所有的非数字
^ 匹配一个字符串的开始
$ 匹配一个字符串的结尾
a表达式|b表达式 匹配a表达式或b表达式的内容,如果匹配a成功了,就不会跟b匹配了
,如果两个规则有重叠部分,总是把长的放到前面
www\.oldboy\.com|www\.jd\.com
www\.(oldboy|jd)\.com
() 约束|描述的内容的范围问题


#####量词
{n} 表示匹配n次 \d{2} 匹配一个2位数
{n,} 表示匹配至少n次
{n,m} 表示至少匹配n次,至多m次
? 表示匹配0次或1次 {0,1}
+ 表示匹配1次或多次 {1,}
* 表示0次或多次 {0,}


匹配整数或小数
\d+(\.\d+)?
11位手机号码
^1[3-9]\d{9}$
从大文件中找复核规则的内容
就不加^跟$了


####

.*?x 匹配任意内容任意次数,遇到x就停下来
.+?x 匹配任意内容至少1次,遇到x就停下来
贪婪匹配:
在量词范围内,尽量多匹配
在量词范围允许的情况下,尽量多的匹配内容
.*x 表示匹配任意字符,任意多次数,但是遇到最后一个x才
停下来
贪心算法/回溯算法
\d{3,}6
非贪婪(惰性匹配)
在量词范围内,尽量少匹配
\d{3,}?6
.*?x 表示匹配任意字符,任意多次数,但是一遇到x就停下来

###转义符
1原本有特殊意义的字符,到了表达它本身的意义的时候,需要转义
2.有一些有特殊意义的内容,放在字符组中,会取消它的特殊意义
[().*+?] 没有特殊意义了
[a\-c] \ 是有特殊意义的

 

Import re
findall 还是按照完整的正则进行匹配,总是只显示括号里匹配到的内容
ret=re.findall('9(\d)\d',ssjkjk188)
findall 把所有匹配的都拿出来,返回列表
ret=re.search 取一个匹配的,返回的是一个变量,如果空的话会报错,需要
判断一下 ,用ret.group()
print(ret)
if ret:
print(ret.group())
print(ret.group(1))
ret=re.search('9(\d)\d',ssjkjk188)

findall 取所有符号条件的,优先显示分组中的
search 只取第一个符合条件的,没有优先显示这件事儿
searchh 还是按照完整的正则进行匹配,显示也显示匹配到
的第一个内容,但是我们可以通过给group方法传参数,来获取具体分组中的内容

search 得到的结果是一个变量,变量.group的结果完全和变量.group(0)的结果一致
。可以通过变量.group(n)的形式来指定获取第n个分组中匹配到的内容

1为什么要用分组:
把想要的内容放分组里
2.如何取消分组优先
如果在写正则的时候由于不得已的原因导致不要的内容也得写在分组里
(?:)取消这个分组的优先显示

 

split
sub
subn
match
compile :节省代码时间的工具
假如同一个正则表达式要被多次使用
节省了多次解析同一个正则表达式的时间
ret=re.compile('\d+')
ret.search('alex2789')
ret.findall('alex2789')
finditer:节省空间


### 给分组命名
(?P<name>\d+)

分组命名的引用
<(?P<tag>\w)>.*?</(?P=tag)>

print(ret.group('name'))


.任意一个字符,不能是\n,普通模式、多行模式、single line 、dot all,\n也能匹配
普通模式:就是一个长长的字符串
多行模式:普通模式改成以\n为换行符的多行文本,只影响^$
单行模式:dot(点.) all,一穿到底
^永远指的是行首
$永远指的是行尾

标签:匹配,ret,re,正则,分组,内容,group
From: https://www.cnblogs.com/jtyzy/p/16707097.html

相关文章

  • java中的System.currentTimeMillis()是什么?时间的单位转换以及方法的使用
    在开发过程中,通常很多人都习惯使用newDate()来获取当前时间。newDate()所做的事情其实就是调用了System.currentTimeMillis()。如果仅仅是需要或者毫秒数,那么完全可以使......
  • React——作为可选参数的钩子
    React——作为可选参数的钩子你可以把钩子作为参数,但你应该这样做吗?你为什么要这样做?这是一个和我一起玩的沙盒:但基本上,它是这样的:函数奇怪的组件({钩子=使用钩......
  • 第六章 Redis新数据类型
    一、Bitmaps1.简介现代计算机用二进制(位)作为信息的基础单位,1个字节等于8位,例如“abc”字符串是由3个字节组成,但实际在计算机存储时将其用二进制表示,“abc”分别对应......
  • 第四章 Redis-6.0版本配置文件详解
    一、Units单位#如果要配置跟内存大小相关的参数是可以这样配置,只支持bytes,不支持bit,这些单位都是大小写不敏感的:#1k=>1000bytes#1kb=>1024bytes#1m=>10......
  • Guava Retry重试机制
    1、添加pom依赖<dependency><groupId>com.github.rholder</groupId><artifactId>guava-retrying</artifactId><version>2.0.0</version></dependency>2、Gua......
  • 第二章 Redis-6.0概述安装
    一.缓存数据库的概念传统的数据库管理系统把所有数据都放在磁盘上进行管理,所以称做磁盘数据库(DRDB:Disk-ResidentDatabase)。磁盘数据库需要频繁地访问磁盘来进行数据的操......
  • @Retryable注解的使用
    @Retryable前言在实际工作中,重处理是一个非常常见的场景,比如:发送消息失败。调用远程服务失败。争抢锁失败。 这些错误可能是因为网络波动造成的,等待过后重处理......
  • CSS 中的 :is() 和 :where() 是什么?它们是相同的还是不同的?
    什么是:是()和:where()在CSS中?它们是相同的还是不同的?这:是()伪类函数将选择器列表作为其参数,并选择可以由该列表中的选择器之一选择的任何元素。:is()以上等价于以......
  • Master笔记 22-9-18 @MLP @结构重参数化 @RepLKNet @Depthwise Separable Convolution
    MLP-Mixer:Anall-MLPArchitectureforVisionpreref:https://zhuanlan.zhihu.com/p/369970953ref:https://zhuanlan.zhihu.com/p/373070779ref:https://zhuanlan......
  • Node.js(二)express
    npminit-y(初始化项目)npminstallexpress(引入express)npxexpress-generator-e(自动生成模板。添加对ejs模板引擎的支持)app.jsconstexpress=require("express......