首页 > 其他分享 >正则语法

正则语法

时间:2023-12-26 15:25:47浏览次数:35  
标签:字符 匹配 res 语法 re 正则 str my

正则

字符组

  • [字符组] 在同一个位置可能出现的各种字符组成了一个字符组
  • 在正则表达式中用[]表示
[0123456789]       # 匹配0-9中某个字符的单个结果   
[0-9]			   # 匹配0-9中某个字符的单个结果   
[a-z]			   # 匹配a-z中某个字符的单个结果
[A-Z] 			   # 匹配A-Z中某个字符的单个结果
[0-9a-zA-Z]		   # 匹配数字或小写字母或大写字母的单个结果

元字符

元字符 匹配内容
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线
\s 匹配任意的空白符
\d 匹配数字
\n 匹配一个换行符
\t 匹配一个制表符
\b 匹配一个单词的结尾
^ 匹配字符串的开始
$ 匹配字符串的结尾
\W 匹配非字母或数字或下划线
\D 匹配非数字
\S 匹配非空白符
a|b 匹配字符a或字符b
() 匹配括号内的表达式,也表示一个组
[...] 匹配字符组中的字符
[^...] 匹配除了字符组中字符的所有字符

量词

量词 用法说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

非贪婪模式

  • ?取消非贪婪模式
  • *? 重复任意次,但尽可能少重复
  • +? 重复1次或更多次,但尽可能少重复
  • ?? 重复0次或1次,但尽可能少重复
  • {n,m}? 重复n到m次,但尽可能少重复
  • {n,}? 重复n次以上,但尽可能少重复

re模块

import re
【1】查找结果(findall)
str = 'my name is qcc,my age is 18'

res = re.findall(pattern=r'\w', string=str)
print(res)
# ['m', 'y', 'n', 'a', 'm', 'e', 'i', 's', 'q', 'c', 'c', 'm', 'y', 'a', 'g', 'e', 'i', 's', '1', '8']
【2】查找结果(search)
str = 'my name is qcc,my age is 18'

a = re.compile(pattern=r'\w')
res = re.search(pattern=a, string=str)
print(res)
# <re.Match object; span=(0, 1), match='m'>
print(res.group())
# m
【3】查找结果(match)
str = 'my name is qcc,my age is 18'

a = re.compile(pattern=r'\w')
res = re.match(pattern=a, string=str)
print(res)
# <re.Match object; span=(0, 1), match='m'>
print(res.group())
# m
【4】切割(split)
str = 'my name is qcc,my age is 18'

res = re.split(pattern='a', string=str)
print(res)
# ['my n', 'me is qcc,my ', 'ge is 18']
【5】指定个数替换(sub)
str = 'my name is qcc,my age is 18'

res = re.sub('\d', 'H', str, 1)
print(res)
# my name is qcc,my age is H8
【6】替换全部(subn)
str = 'my name is qcc,my age is 18'

res = re.subn('\d', 'H', str)
print(res)
# ('my name is qcc,my age is HH', 2)
【7】匹配结果为迭代器(finditer)
str = 'my age is 18'

res = re.finditer(pattern='\d*',string=str)
print(res)
# <callable_iterator object at 0x000002358C04DFD0>
for i in res:
    print(i)

# <re.Match object; span=(0, 0), match=''>
# <re.Match object; span=(1, 1), match=''>
# <re.Match object; span=(2, 2), match=''>
# <re.Match object; span=(3, 3), match=''>
# <re.Match object; span=(4, 4), match=''>
# <re.Match object; span=(5, 5), match=''>
# <re.Match object; span=(6, 6), match=''>
# <re.Match object; span=(7, 7), match=''>
# <re.Match object; span=(8, 8), match=''>
# <re.Match object; span=(9, 9), match=''>
# <re.Match object; span=(10, 12), match='18'>
# <re.Match object; span=(12, 12), match=''>
【8】实战
  • 获取第一页文章信息
import requests
import re

url = 'https://www.qidian.com/chapter/1031940621/705235484/'

res=requests.get(url)

with open('1.html','w',encoding='utf-8') as f:
    f.write(res.text)
  • 读取内容
with open('1.html','r',encoding='utf-8') as f:
    data=f.read()

res = re.compile( pattern=r'<p>(.*?)</p>')

res_all = re.findall(pattern=res, string=data)
for i in res_all:
    print(i)

image-20231226140527360

标签:字符,匹配,res,语法,re,正则,str,my
From: https://www.cnblogs.com/unrealqcc/p/17928182.html

相关文章

  • 正则表达式
      publicstaticvoidmain(String[]args){Stringregex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$!%*?^&~#()-+=;,.{}<>/?])[A-Za-z\\d**$@$**!%*?&]{12,}$";//替换为你的正则表达式Stringinput="gzh12345678GZ......
  • 什么是语法糖
    语法糖在编程领域中,"语法糖"(SyntacticSugar)是一个术语,用于描述一种编程语言的特性或构造,它使得代码更简洁、易读或符合程序员的习惯,而不会改变其基本语义或运行效果。简而言之,语法糖是一种让代码看起来更甜、更友好的语法表现形式。举个例子来帮助理解:解构赋值:在JavaScript中......
  • 正则
    【一】正则(1)引入在线测试工具http://tool.chinaz.com/regex/首先要知道的是谈到正则,就只和字符串相关了。在提供的工具中,输入的每一个字都是一个字符串。(2)字符组字符组:[]在同一个位置可能出现的各种字符组成了一个字符组在正则表达式中用[]表示字符分为很多......
  • Mysql报语法错误,排查竟然花了一个钟!!!!
    背景:最近协助远程同事开发一个功能,我调用同事写的接口,发现报错,,同事正在处理其他事情,暂时无暇顾及。遂自行解决。查看日志发现,发现一个inser语句报语法错误。解决过程:1、找到报错的日志,查看sql。如果没有,打开mybatis-plus日志输出。2、将sql复制出来在mysql客户端模拟执行,发现sql......
  • Python内置语法手册
    一、引入​ 在Python中有很多不常见内置函数,内置语法,为了方便查阅使用。现在将它们进行归纳。二、内置函数#abs():返回数字的绝对值abs(-7)#>>>7#all():如果参数里的可迭代对象中所有值都是True,则返回True。空值为Falseall(['1','',1])#>>>False#any():如果可......
  • Markdown 语法学习
    Markdown学习标题的添加​ 一级标题:#一级标题内容​ 二级标题:##二级标题内容​ 三级标题:###三级标题内容​ 以此内推文字格式​ 划线:~~+文字内容+~~​ 粗体文字:**+文字内容+**​ 斜体文字:*+文字内容+*​ 斜粗体文字:三个*,中间加文字内容分割线......
  • 【CUMT计算机系统设计】Verilog语法概览
    基操标识符区分大小写,逻辑值不区分首字符必须为字母/下划线1. 模块Module有I/O功能的黑盒2.逻辑块always构建组合and时序逻辑块:if,case,for...always@(...)begin……end上升沿posedge下降沿negedgegenerate主要结合for:对向量......
  • 参与循环的正则表达式可能导致异常
    问题描述:批量上传图片后,我们希望获取每一个图片的名字letreg=/(.+)\.(jpg|png|gif|jpeg|webp)/gi; //作为全局变量functioninfo(){letimgInfo=reg.exec(file.name)//这是在循环方法里。然后就出错了。file.name是能获取的,但是经过 reg.exec()处理要得到结果时......
  • java基础语法api之随机数的介绍以及案例应用
    一:概述在实际开发应用中,我们都会看到,有许多的场景中需要使用到随机不确定的数。在这时,我们就需要用到API中的Random类。二:具体说明<1>JDK_API帮助文档中的说明Random:-该类的实例用于生成随机数构造方法:-Random():创建一个新的随机数生成器成员方法-intnextInt(intbound):获......
  • Spring Boot学习随笔- 第一个Thymeleaf应用(基础语法th:,request、session作用域取值)
    学习视频:【编程不良人】2021年SpringBoot最新最全教程第十五章、ThymeleafThymeleaf是一种现代化的服务器端Java模板引擎,专门用于Web和独立环境。Thymeleaf在有网络和无网络的环境下皆可运行,即可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页......