python 正则表达式提取字符串

以某个字符开始、某个字符结束,期待的提取结果包含首末字符串

提取公式:a = re.findall(“开始字符串.*末字符串”,str)

以某个字符开始、某个字符结束,期待的提取结果不包含末字符串,但包含首字符串

    提取公式:a = re.findall("开始字符串.*?(?=末字符串)",str)time = re.findall("202.*?(?=,)",content)  # 也就是提取以202开头的,逗号结束的,且不包括逗号的

以某个字符开始、某个字符结束,期待的提取结果不包含首字符串,但包含末字符串:

    提取公式:a = re.findall("(?<=开始字符串).*末字符串",str)

以某个字符开始、某个字符结束,期待的提取结果不包含首、末字符串:

    提取公式1:a = re.findall("(?<=开始字符串).*?(?=末字符串)",str)提取公式2:a = re.findall(".*开始字符串(.*)末字符串*",str)micro_step = re.findall("(?<=micro_step=).*?(?=/global_step)", content)  # case4 方法1micro_step = re.findall(".*micro_step=(.*)/global_step*", content)  # case4方法2

起始字符串不固定(即从首字符串提取到固定的字符串结束),用^指定从首字符串开始

    提取公式:a = re.findall('^.*结束字符串',str)

特殊字符-需要转义

$ :匹配字符串的结尾。 示例:World$ 可以匹配以 “World” 结尾的字符串
() :定义一个分组,用于对模式进行分组和捕获。 示例:(ab)+ 可以匹配 “ab”、“abab”、“ababab” 等。
*  :匹配前面的元素零次或多次 示例:ab*c 可以匹配 “ac”、“abc”、“abbc”、“abbbc” 等
+ :匹配前面的元素一次或多次。 示例:ab+c 可以匹配 “abc”、“abbc”、“abbbc” 等,但不匹配 “ac”。
.  :匹配除换行符外的任意**一个**字符。 示例:a.b 可以匹配 “aab”、“axb”、“a@b” 等
[ ] :定义**一个**字符类,匹配其中任意一个字符。 示例:[aeiou] 可以匹配任意一个小写元音字母  
?  :匹配前面的元素零次或一次。 示例:ab?c 可以匹配 “ac”、“abc”,但不匹配 “abbc”
\   :转义
^  :匹配字符串的开头。 示例:^Hello 可以匹配以 “Hello” 开头的字符串
{} :定义重复次数的范围。 示例:a{2,4} 可以匹配 “aa”、“aaa”、“aaaa”,但不匹配 “a” 或 “aaaaa”
|  :在两个模式之间进行选择,匹配其中一个。 示例:cat|dog 可以匹配 “cat” 或 “dog”
\b:匹配单词边界,即字符前后不是字母、数字或下划线。 示例:\bword\b 可以匹配 “word”,但不匹配 “words” 或 “sword”。
\d:匹配任意**一个**数字字符,相当于[0-9]。 示例:\d{3} 可以匹配三位数字。
\w:匹配任意**一个**字母、数字或下划线字符,相当于[a-zA-Z0-9_]。示例:\w+ 可以匹配一个或多个字母、数字或下划线字符。
\s:匹配任意**一个**空白字符,包括空格、制表符、换行符等。 示例:Hello\sWorld 可以匹配 “Hello World” 或 “Hello\tWorld”。

python正则表达式取中间字符串

单个位置的字符串提取使用(.+?)

import restr = "a123b"print(re.findall(r"a(.+?)b",str))#输出['123']

贪婪和非贪婪匹配

import restr = "a123b456b"
print(re.findall(r"a(.+?)b", str))
#输出['123']#?控制只匹配0或1个,所以只会输出和最近的b之间的匹配情况
print(re.findall(r"a(.+)b", str))#输出['123b456']
print(re.findall(r"a(.*)b", str))#输出['123b456']

多行匹配

如果你要多行匹配,那么需要加上re.S和re.M标志. 加上re.S后, .将会匹配换行符,默认.不会匹配换行符. 代码如下

str = "a23b\na34b"
re.findall(r"a(\d+)b.+a(\d+)b", str)
#输出[]
#因为不能处理str中间有\n换行的情况
re.findall(r"a(\d+)b.+a(\d+)b", str, re.S)
#s输出[('23', '34')]

连续多个位置的字符串提取

这种情况我们可以使用(?P…)这个正则表达式来提取
有一行webserver的access日志:‘192.168.0.1 25/Oct/2012:14:46:34 “GET /api HTTP/1.1” 200 44 “http://abc.com/search” “Mozilla/5.0”’,我们想提取这行日志里面所有的内容,可以写多个(?Pexpr)来提取,其中name可以更改为你为该位置字符串命名的变量,expr改成提取位置的正则即可

import re
line ='192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" 
"Mozilla/5.0"'
reg = re.compile('^(?P<remote_ip>[^ ]*) (?P<date>[^ ]*) "(?P<request>[^"]*)" 
(?P<status>[^ ]*) (?P<size>[^ ]*) "(?P<referrer>[^"]*)" "(?P<user_agent>[^"]*)"')
regMatch = reg.match(line)
linebits = regMatch.groupdict()
print(linebits)
for k, v in linebits.items() :print(k+": "+v)

用正则表达式提取字符串中的整数

import re
re.findall("\d+","asd1234")
 pattern2 = r"<div>.*?</div>"
matches2 = re.findall(pattern2, text)
print("\n非贪婪匹配结果:")
for match in matches2:print(match)
import retext = "Check out these websites: http://www.example.com, https://www.google.com, www.yahoo.com"# 匹配网址
url_pattern = r"(http|https)://([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})"
urls = re.findall(url_pattern, text)
for url in urls:full_url = url[0] + "://" + url[1]print(full_url)

使用sub函数进行替换

re.sub(pattern, repl, string, count=0, flags=0):在字符串中查找匹配正则表达式的部分,并进行替换。

import repattern = r"apple"
string = "I have an apple."
new_string = re.sub(pattern, "orange", string)
print(new_string)

## 常用的正则表达式
匹配数字:^\d+$ 可以匹配一个或多个数字。
匹配字母:^[a-zA-Z]+$ 可以匹配一个或多个字母。
匹配数字和字母:^[a-zA-Z0-9]+$ 可以匹配一个或多个数字和字母的组合。
匹配邮箱地址:^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ 可以匹配常见的邮箱地址格式。
匹配URL:^(https?|ftp)://[^\s/$.?#].[^\s]*$ 可以匹配常见的URL格式。
匹配手机号码:^1[3456789]\d{9}$ 可以匹配中国大陆的手机号码格式。
匹配日期(YYYY-MM-DD):^\d{4}-\d{2}-\d{2}$ 可以匹配YYYY-MM-DD格式的日期。
匹配时间(HH:MM):^([01]\d|2[0-3]):[0-5]\d$ 可以匹配24小时制的时间格式。
匹配IP地址:^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$ 可以匹配IPv4地址。
匹配HTML标签:<(\w+)>(.*)<\/\1> 可以匹配简单的HTML标签,如<p>...</p>。
匹配邮政编码:^[1-9]\d{5}$ 可以匹配6位数字的邮政编码。
匹配身份证号码:^\d{17}[\dXx]$ 可以匹配18位数字或17位数字加一个大写字母X(校验位)的身份证号码。
匹配电话号码(包括区号):^(\d{3,4}-)?\d{7,8}$ 可以匹配带有可选区号的固定电话号码。
匹配用户名:^[a-zA-Z0-9_-]{3,16}$ 可以匹配长度为3到16个字符的用户名,允许字母、数字、下划线和减号。
匹配整数:^-?\d+$ 可以匹配正整数或负整数。
匹配浮点数:^-?\d+(\.\d+)?$ 可以匹配正浮点数或负浮点数。
匹配文件路径(Windows):^[A-Za-z]:\\(?:[^\\/:*?"<>|\r\n]+\\)*[^\\/:*?"<>|\r\n]*$ 可以匹配Windows文件路径,如C:\folder\file.txt。
匹配中文字符:[\u4e00-\u9fa5] 可以匹配任意一个中文字符。
匹配空白行:^\s*$ 可以匹配只包含空白字符的行。
匹配HTML标签(非贪婪模式):<.*?> 可以匹配HTML标签,但是在遇到第一个闭合的尖括号时停止匹配。

数量限定

字符	描述
X?	匹配前面的子表达式X零次或一次,要匹配 ? 字符使用 ​\?
X*	匹配前面的子表达式X零次或多次,要匹配 * 字符使用 ​\*
X+	匹配前面的子表达式X一次或多次,要匹配 + 字符使用 ​\+
X{n}	匹配前面的子表达式X n次
X{n,}	匹配前面的子表达式X最少n次
X{n,m}	匹配前面的子表达式X最少n次,不超过m次
# 匹配全部都是数字的字符串^[0-9]*$** 
# 匹配只有n位数字的字符串^\d{n}$**
# 匹配至少有n位数字的字符串^\d{n,}$**
# 匹配有m位到n位数字的字符串^\d{m,n}$**
# 匹配最多带两位小数的数字^([1-9][0-9]*)+(.[0-9]{1,2})?$** 
# 匹配带1-2位小数的正数或负数^(\-)?\d+(\.\d{1,2})?$**
# 匹配正数、负数和小数^(\-|\+)?\d+(\.\d+)?$**
# 匹配正整数  ^   1-9 ]\d*$**
# 匹配负整数^-[1-9]\d*$**
# 匹配浮点数^(-?\d+)(\.\d+)?$**
# 匹配正浮点数^\d+\.\d+$**
# 匹配负浮点数^-\d+\.\d+$**
# 匹配汉字^[\u4e00-\u9fa5]{0,}$**
# 匹配英文和数字^[A-Aa-z0-9]+$**
# 匹配中文、英文、数字和下划线组成的字符串^[\u4e00-\u9f5aA-Za-z0-9_]+$**
# 匹配email地址^[A-Za-z0-9._%±]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$**
# 匹配手机号码^1[3456789]\d{9}$**
# 匹配URL地址’[a-zA-Z]+://[^\s]***
# 匹配身份证号码(\d{15}$|^\d{18}$|\d{17}(\d|X|x))$**

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/34988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cesium--旋转3dtiles

以下代码来自Cesium 论坛&#xff1a;3DTileset rotation - CesiumJS - Cesium Community 在1.118中测试可行&#xff0c;可直接在Sandcastle中运行&#xff1a; const viewer new Cesium.Viewer("cesiumContainer", {terrain: Cesium.Terrain.fromWorldTerrain()…

机器学习课程复习——线性回归

Q&#xff1a;回归和分类的区别&#xff1f; 回归是连续的&#xff0c;分类是离散的 Q:用最小二乘法对线性回归模型进行参数估计思路 例题

排序。。。

1. 掌握常用的排序方法&#xff0c;并掌握用高级语言实现排序算法的方法&#xff1b; 2. 深刻理解排序的定义和各种排序方法的特点&#xff0c;并能加以灵活应用&#xff1b; 3. 了解各种方法的排序过程及其时间复杂度的分析方法。 编程实现如下功能&#xff1a; &#xff08;1…

Makefile中error函数的用法

在 Makefile 中&#xff0c;error 函数是一个特殊的函数&#xff0c;用于在执行过程中生成一个错误消息并终止 Makefile 的执行。它的基本语法如下&#xff1a; $(error error-message)其中&#xff0c;error-message 是一个字符串&#xff0c;表示要显示的错误消息。当 Makef…

vue+three.js渲染3D模型

安装three.js: npm install three 页面部分代码&#xff1a; <div style"width: 100%; height: 300px; position: relative;"><div style"height: 200px; background-color: white; width: 100%; position: absolute; top: 0;"><div id&…

【绕过无限Debugger】

文章目录 引言无限Debugger的工作原理绕过无限Debugger的常用技巧条件断点法置空法代码修改与加密 引言 在Web开发中&#xff0c;debugger语句是一种强大的JavaScript功能&#xff0c;允许开发者在代码中设置断点&#xff0c;便于调试和理解代码执行流程。然而&#xff0c;这一…

【文末附gpt升级秘笈】程序的“通用性”与“过度设计”的困境

程序的“通用性”与“过度设计”的困境 四、解决方案的深入阐述 &#xff08;一&#xff09;明确需求和目标&#xff1a;需求驱动设计 在软件开发的初期&#xff0c;我们需要与业务团队紧密合作&#xff0c;深入了解项目的实际需求和目标。这不仅包括明确的功能需求&#xf…

filelist中+incdir+的用法

在大多数 Verilog 编译器&#xff08;如 VCS、ModelSim/Questa、Verilator&#xff09;中&#xff0c;使用 incdir 选项指定包含路径后&#xff0c;仍然需要在 filelist 文件中列出每一个 Verilog 源文件。incdir 选项仅告诉编译器在特定目录中查找头文件&#xff08;例如 .vh …

go语言day4 引入第三方依赖 整型和字符串转换 进制间转换 指针类型 浮点数类型 字符串类型

Golang依赖下载安装失败解决方法_安装go依赖超时怎么解决-CSDN博客 go安装依赖包&#xff08;go get, go module&#xff09;_go 安装依赖-CSDN博客 目录 go语言项目中如何使用第三方依赖&#xff1a;&#xff08;前两步可以忽略&#xff09; 一、安装git&#xff0c;安装程序…

linux学习week1

linux学习 一.介绍 1.概述 linux的读法不下10种 linux是一个开源的操作系统&#xff0c;操作系统包括mac、windows、安卓等 linux的开发版&#xff1a;Ubuntu&#xff08;乌班图&#xff09;、RedHat&#xff08;红帽&#xff09;、CentOS linux的应用&#xff1a;linux在服…

归并排序与快速排序总结-c++

一&#xff0c;归并排序 归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效的排序算法。该算法分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。 作为一种典型的分而治之思想的算法应用&#xff0c;归并排序的实现由两种方法…

KVM网络模式设置

一、KVM网络模式介绍 1、NAT ( 默认上网 ) 虚拟机利用host机器的ip进行上网,对外显示一个ip;virbr0是KVM 默认创建的一个 Bridge,其作用是为连接其上的虚机网卡提供NAT访问外网的功能,默认ip为192.168.122.1 2、自带的Bridge 将虚拟机桥接到host机器的网卡上,vm和ho…

mysql如何一句实现二行数据的列对换?

二行数据相同列内容对换 思路&#xff1a;先用多表联查的方式查询出这二行数据&#xff0c;再将查询改成修改语句&#xff0c;需要对换的列相互设置值。 //查询 SELECT * fromser_ele_detail AS rule1JOIN ser_ele_detail AS rule2 ON ( rule1.account_no rule2.account_no …

240622_昇思学习打卡-Day4-ResNet50迁移学习

240622_昇思学习打卡-Day4-ResNet50迁移学习 我们对事物的认知都是一点一点积累出来的&#xff0c;往往借助已经认识过的东西&#xff0c;可以更好地理解和认识新的有关联的东西。比如一个人会骑自行车&#xff0c;我们让他去骑摩托车他也很快就能学会&#xff0c;比如已经学会…

使用容器部署redis_设置配置文件映射到本地_设置存储数据映射到本地_并开发java应用_连接redis---分布式云原生部署架构搭建011

可以看到java应用的部署过程,首先我们要准备一个java应用,并且我们,用docker,安装一个redis 首先我们去start.spring.io 去生成一个简单的web项目,然后用idea打开 选择以后下载 放在这里,然后我们去安装redis 在公共仓库中找到redis . 可以看到它里面介绍说把数据放到了/dat…

理解和实现 LFU 缓存置换算法

引言 在计算机科学中&#xff0c;缓存是一种重要的技术&#xff0c;用于提高数据访问速度和系统性能。然而&#xff0c;由于缓存空间有限&#xff0c;当缓存满了之后&#xff0c;就需要一种智能的策略来决定哪些数据应该保留&#xff0c;哪些应该被淘汰。LFU&#xff08;Least…

FLASH闪存

FLASH闪存 程序现象&#xff1a; 1、读写内部FLASH 这个代码的目的&#xff0c;就是利用内部flash程序存储器的剩余空间&#xff0c;来存储一些掉电不丢失的参数。所以这里的程序是按下K1变换一下测试数据&#xff0c;然后存储到内部FLASH&#xff0c;按下K2把所有参数清0&…

找不到mfc140u.dll怎么修复,mfc140u.dll丢失的多种修复方法

计算机丢失mfc140u.dll文件会导致依赖该文件的软件无法正常运行。mfc140u.dll是Microsoft Visual C 2015的可再发行组件之一&#xff0c;它属于Microsoft Foundation Class (MFC) 库&#xff0c;许多使用MFC开发的程序需要这个DLL文件来正确执行。丢失了mfc140u.dll文件。会导致…

无人机无刷电机理论教学培训课程

本文档为一份关于Brushless电机理论的详细教程&#xff0c;由TYTO Robotics编制&#xff0c;旨在帮助用户理解brushless电机的工作原理、特性以及如何通过实验测定其关键参数Kv和Kt。文档首先介绍了brushless电机的基本组成&#xff0c;包括静止的定子和旋转的转子&#xff0c;…