首页 > 其他分享 >正则

正则

时间:2024-04-15 20:22:58浏览次数:28  
标签:字符 匹配 re 正则 李杰 findall

【一】正则语法
【1】引入
一说规则我已经知道你很晕了
现在就让我们先来看一些实际的应用。
在线测试工具 http://tool.chinaz.com/regex/
首先你要知道的是
谈到正则,就只和字符串相关了。
在我给你提供的工具中,你输入的每一个字都是一个字符串。
其次,如果在一个位置的一个值,不会出现什么变化,那么是不需要规则的。
比如
你要用"1"去匹配"1"
或者用"2"去匹配"2"
直接就可以匹配上。
这连python的字符串操作都可以轻松做到。
那么在之后我们更多要考虑的是在同一个位置上可以出现的字符的范围。
【2】字符组
字符组 :[字符组] 在同一个位置可能出现的各种字符组成了一个字符组

在正则表达式中用[]表示

字符分为很多类

比如数字、字母、标点等等。
假如你现在要求一个位置"只能出现一个数字"

那么这个位置上的字符只能是0、1、2...9这10个数之一。

正则 待匹配字符 匹配结果 说明
[0123456789] 8 True 在一个字符组里枚举合法的所有字符,字符组里的任意一个字符和"待匹配字符"相同都视为可以匹配
[0123456789] a False 由于字符组中没有"a"字符,所以不能匹配
[0-9] 7 True 也可以用-表示范围,[0-9]就和[0123456789]是一个意思
[a-z] s True 同样的如果要匹配所有的小写字母,直接用[a-z]就可以表示
[A-Z] B True [A-Z]就表示所有的大写字母
[0-9a-fA-F] e True 可以匹配数字,大小写形式的a~f,用来验证十六进制字符
import re
"""re.findall(正则模式, 文本) 基于正则模式查找所有匹配的文本内容"""

part1: 通配符->. 字符集-> []

ret1 = re.findall("a", "a,b,c,d,e")
ret1 = re.findall(".", "a,b,c,d,e")
ret1 = re.findall("[ace]", "a,b,c,d,e")
ret1 = re.findall("[a-z]", "a,b,c,d,e")
ret1 = re.findall("[0-9]", "1,2,3,4,5")
ret1 = re.findall("\d", "1,2,3,4,5")
ret1 = re.findall("[0-9a-z]", "1,a,2,b,3")
ret1 = re.findall("[^a-z]", "1,a,2,b,3")
ret1 = re.findall("[^0-9,]", "1,a,2,b,3")
print(ret1)
【3】元字符
元字符 匹配内容
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线
\s 匹配任意的空白符
\d 匹配数字
\n 匹配一个换行符
\t 匹配一个制表符
\b 匹配一个单词的结尾
^ 匹配字符串的开始
$ 匹配字符串的结尾
\W 匹配非字母或数字或下划线
\D 匹配非数字
\S 匹配非空白符
a|b 匹配字符a或字符b
() 匹配括号内的表达式,也表示一个组
[...] 匹配字符组中的字符
[^...] 匹配除了字符组中字符的所有字符

part2:重复元字符-> + * {} ?

ret2 = re.findall("[0-9a-zA-Z]", "apple,banana,orange,melon")
ret2 = re.findall("\w", "apple,banana,orange,melon")
ret2 = re.findall("\w+", "apple,banana,orange,melon")
ret2 = re.findall("\w+?", "apple,banana,orange,melon") # 取消贪婪匹配
ret2 = re.findall("\w*", "apple,banana,orange,melon")
ret2 = re.findall("\w{6}", "apple,banana,orange,melon")
【4】量词
量词 用法说明

  • 重复零次或更多次
  • 重复一次或更多次
    ? 重复零次或一次
    {n} 重复n次
    {n,} 重复n次或更多次
    {n,m} 重复n到m次
    【5】位置元字符. ^ $
    正则 待匹配字符 匹配 结果 说明
    海. 海燕海娇海东 海燕海娇海东 匹配所有"海."的字符
    ^海. 海燕海娇海东 海燕 只从开头匹配"海."
    海.$ 海燕海娇海东 海东 只匹配结尾的"海.$"

part3: 位置元字符-> ^ $

ret3 = re.findall("^\w{5}", "apple,banana,peach,orange,melon")
ret3 = re.findall("\w{5}$", "apple,banana,peach,orange,melon")
ret3 = re.findall("^\w{5}$", "apple,banana,peach,orange,melon")
print(ret3)
【6】重复匹配* + ? { }
正则 待匹配字符 匹配 结果 说明
李.? 李杰和李莲英和李二棍子 李杰 李莲 李二 ?表示重复零次或一次,即只匹配"李"后面一个任意字符
李.* 李杰和李莲英和李二棍子 李杰和李莲英和李二棍子 表示重复零次或多次,即匹配"李"后面0或多个任意字符
李.+ 李杰和李莲英和李二棍子 李杰和李莲英和李二棍子 +表示重复一次或多次,即只匹配"李"后面1个或多个任意字符
李.{1,2} 李杰和李莲英和李二棍子 李杰和 李莲英 李二棍 {1,2}匹配1到2次任意字符
注意:前面的
,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配
【7】字符集[][^]
正则 待匹配字符 匹配 结果 说明
李[杰莲英二棍子]* 李杰和李莲英和李二棍子 李杰 李莲英 李二棍子 表示匹配"李"字后面[杰莲英二棍子]的字符任意次
李[^和]* 李杰和李莲英和李二棍子 李杰 李莲英 李二棍子 表示匹配一个不是"和"的字符任意次
[\d] 456bdha3 4 5 6 3 表示匹配任意一个数字,匹配到4个结果
[\d]+ 456bdha3 456 3 表示匹配任意个数字,匹配到2个结果
【8】分组匹配 ()与 或 |[^]
身份证号码是一个长度为15或18个字符的字符串
如果是15位则全部

标签:字符,匹配,re,正则,李杰,findall
From: https://www.cnblogs.com/zenopan101861/p/18136844

相关文章

  • 正则表达式在字符串中表达
    ysyx的表达式求值环节需要自行编写规则。在样例里,官方已经给出了匹配空格、加号的样例。空格规则对应字符串为"+",表示匹配一个或更多空格。加号表示前面的符号至少出现一次。加号规则则是"\\+" ,首先,加号+在正则表达式里是特殊符号,需要一个反斜杠\转义才能执行,但是反斜杠......
  • 正则表达式常用学习
    0.简介regularexpression,规则表达式,是一种用来处理字符串的规则,巧妙的正则表达式可以节省很多判断代码.1.组成元字符特殊元字符\转义字符=>普通字符<=>特殊字符.点=>代表除了\n以外的任意字符(字符字符字符)^=>以哪个元字符开始$=>......
  • [深度学习]L2正则化和权重衰退(Weight Decay)
    L2正则化和权重衰退(WeightDecay)一、权重衰退介绍1.什么是权重衰减/权重衰退——weight_decayL2正则化主要作用是:解决过拟合,在损失函数中加入L2正则化项2.L2范数L2范数,也被称作欧几里得范数或者Frobenius范数(当应用于矩阵时),是最常用的向量范数之一,用于衡量向量元......
  • js正则表达式
    正则表达式创建正则对象//构造函数newRegExp('规则','标识')//字面量书写/规则/标识正则常用方法//reg是正则对象reg.test('字符串');//验证字符串是否满足规则//reg是正则对象,str是字符串str.replace(reg,'替换目标');//将字符串中匹配正则的部分替换为目......
  • 从Google网页中通过正则表达式获取json如何转换unicode对象
    场景:Google爬虫,获取下拉框搜索关键词,需要获取页面的里面的json字符串如下面:'{\\x22aa\\x22:{},\\x22abd\\x22:{\\x22abd\\x22:false,\\x22deb\\x22:false,\\x22det\\x22:false},\\x22async\\x22:{},\\x22attn\\x22:{},\\x22bgd\\x22:{\\x22ac\\x22:true,\\x......
  • 20个Python 正则表达式应用与技巧
    本文分享自华为云社区《Python正则表达式大揭秘应用与技巧全解析》,作者:柠檬味拥抱。Python中的re模块是用于处理正则表达式的强大工具。正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式。在本文中,我们将探讨Python中re模块的应用和一些技......
  • 正则化项
    以下为ai生成:正则化项是机器学习中用于控制模型复杂度的一种技术,它通过向损失函数添加额外的惩罚项来实现这一目的。这样做的主要好处是防止模型过拟合训练数据,从而帮助模型更好地泛化到未见过的数据。正则化项的作用是通过对模型参数进行惩罚,鼓励模型选择更简单的解决方案,例如通......
  • java中字符串替换的4种方法 replaceAll() 带正则表达式参数 str.replaceAll("[0-9]+
    java中字符串替换的4种方法replaceAll()带正则表达式参数str.replaceAll("[0-9]+","");目录前言一、String的replace()方法二、String的replaceAll()方法三、StringBuffer/StringBuilder的replace()方法四、Matcher的replaceAll()方法总结前言在日常开发中,我们对......
  • 常用正则表达式
    1.校验数字的表达式 1.数字:^[0-9]*$ 2.n位的数字:^\d{n}$ 3.至少n位的数字:^\d{n,}$ 4.m-n位的数字:^\d{m,n}$ 5.零和非零开头的数字:^(0|[1-9][0-9]*)$ 6.非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7.带1-2位小数的正数或负数:^(\-)?\d+(......
  • 日志脱敏更加优雅性能更好,远超正则。支持 logback+log4j2 插件
    项目介绍日志脱敏是常见的安全需求。普通的基于工具类方法的方式,对代码的入侵性太强,编写起来又特别麻烦。sensitive项目提供基于注解的方式,并且内置了常见的脱敏方式,便于开发。支持logback和log4j2等常见的日志脱敏插件。日志插件解决正则匹配长文本可能出现的回溯......