python正则表达式笔记2

由 '\' 和一个字符组成的特殊序列在以下列出。
如果普通字符不是ASCII数位或者ASCII字母,那么正则样式将匹配第二个字符。比如,\$ 匹配字符 '$'.

\number
匹配数字代表的组合。每个括号是一个组合,组合从1开始编号。
比如 (.+) \1 匹配 'the the' 或者 '55 55', 但不会匹配 'thethe' (注意组合后面的空格)。
这个特殊序列只能用于匹配前面99个组合。
如果 number 的第一个数位是0, 或者 number 是三个八进制数,它将不会被看作是一个组合,而是八进制的数字值。
在 '[' 和 ']' 字符集合内,任何数字转义都被看作是字符。

print('============================')
# 保留中间空格,左右重复字符串,其他数据排除
str_list1 = ['python python', 'python java', 'helloworld', '2023 2023', '20221212']
get_list1 = []
for ss in str_list1:# 查找匹配的字符, 注意组合后面的空格, \1 代表重复前面括号组合规则(.+)if re.search(r"(.+) \1", ss):print('保留')get_list1.append(ss)else:print('去除')continue
print(get_list1)
# ['python python', '2023 2023']
print('============================')

\A
只匹配字符串开始。

\Z
只匹配字符串结尾。

print('============================')
# 保留数字或小数的金额格式数据,其他数据排除
str_list2 = ['5005', '200.85', '¥12450', '¥100.50', '张三', '2023.08.09']
get_list2 = []
for ss in str_list2:# 查找匹配的字符,下面方法等价匹配if re.search(r'\A\d+\.?\d*\Z', ss):# if re.search(r'(\A\d+\.?\d*\Z)', ss):# if re.search(r'(^\d+\.?\d*$)', ss):# if re.search(r'^\d+\.?\d*$', ss):# if re.fullmatch(r'\d+\.?\d*', ss):print('保留')get_list2.append(ss)else:print('去除')continue
print(get_list2)
# ['5005', '200.85', '¥12450', '¥100.50']
print('============================')

\b
匹配空字符串,但只在单词开始或结尾的位置。一个单词被定义为一个单词字符的序列。
注意,通常 \b 定义为 \w 和 \W 字符之间,或者 \w 和字符串开始/结尾的边界,
意思就是 r'\bfoo\b' 匹配 'foo', 'foo.', '(foo)', 'bar foo baz' 但不匹配 'foobar' 或者 'foo3'。

默认情况下,Unicode字母和数字是在Unicode样式中使用的,但是可以用 ASCII 标记来更改。
如果 LOCALE 标记被设置的话,词的边界是由当前语言区域设置决定的,\b 表示退格字符,以便与Python字符串文本兼容。

print('============================')
str_list3 = ['foo', 'foo.', '(foo)', 'bar foo baz', 'foobar', 'foo3']
for ss in str_list3:# 查找匹配的字符print(re.search(r'\bfoo\b', ss))
print('============================')
'''
<re.Match object; span=(0, 3), match='foo'>
<re.Match object; span=(0, 3), match='foo'>
<re.Match object; span=(1, 4), match='foo'>
<re.Match object; span=(4, 7), match='foo'>
None
None
'''

 

\B
匹配空字符串,但不能在词的开头或者结尾。
意思就是 r'py\B' 匹配 'python', 'py3', 'py2', 但不匹配 'py', 'py.', 或者 'py!'.
\B 是 \b 的取非,所以Unicode样式的词语是由Unicode字母,数字或下划线构成的,
虽然可以用 ASCII 标志来改变。如果使用了 LOCALE 标志,则词的边界由当前语言区域设置。

print('============================')
str_list3 = ['python', 'py3', 'py2', 'py', 'py.', 'py!']
for ss in str_list3:# 查找匹配的字符print(re.search(r'py\B', ss))
print('============================')
'''
<re.Match object; span=(0, 2), match='py'>
<re.Match object; span=(0, 2), match='py'>
<re.Match object; span=(0, 2), match='py'>
None
None
None
'''

\d
1, 对于 Unicode (str) 样式:
匹配任何Unicode十进制数(就是在Unicode字符目录[Nd]里的字符)。
这包括了 [0-9] ,和很多其他的数字字符。如果设置了 ASCII 标志,就只匹配 [0-9] 。

2, 对于8位(bytes)样式:
匹配任何十进制数,就是 [0-9]。

\D
匹配任何非十进制数字的字符。
就是 \d 取非。 如果设置了 ASCII 标志,就相当于 [^0-9] 。

print('============================')
string = '(python)-12345'
# 提取全部数字字符
nums_str = ''.join(re.findall(r'\d', string))
print(nums_str)
# 12345
# 提取全部非数字字符
char_str = ''.join(re.findall(r'\D', string))
print(char_str)
# (python)-
print('============================')

\s
1, 对于 Unicode (str) 样式:
匹配任何Unicode空白字符(包括 [ \t\n\r\f\v] ,还有很多其他字符,比如不同语言排版规则约定的不换行空格)。
如果 ASCII 被设置,就只匹配 [ \t\n\r\f\v] 。

2, 对于8位(bytes)样式:
匹配ASCII中的空白字符,就是 [ \t\n\r\f\v] 。

\S
匹配任何非空白字符。
就是 \s 取非。如果设置了 ASCII 标志,就相当于 [^ \t\n\r\f\v] 。

\w
1, 对于 Unicode (str) 样式:
匹配 Unicode 单词类字符;这包括字母数字字符 (如 str.isalnum() 所定义的) 以及下划线 (_)。
如果使用了 ASCII 旗标,则将只匹配 [a-zA-Z0-9_]。

2, 对于8位(bytes)样式:
匹配ASCII字符中的数字和字母和下划线,就是 [a-zA-Z0-9_] 。
如果设置了 LOCALE 标记,就匹配当前语言区域的数字和字母和下划线。

\W
匹配非单词字符的字符。
这与 \w 正相反。如果使用了 ASCII 旗标,这就等价于 [^a-zA-Z0-9_]。
如果使用了 LOCALE 旗标,则会匹配当前区域中既非字母数字也非下划线的字符。
'''

r'''
绝大部分Python的标准转义字符也被正则表达式分析器支持。:
\a \b \f \n
\N \r \t \u
\U \v \x \\
'''

print('============================')
string = '(python)-12345\t \n \r|张三'
# 提取全部空白字符
blank_str = re.findall(r'\s', string)
print(blank_str)
# ['\t', ' ', '\n', ' ', '\r']# 提取全部非空白字符
no_blank_str = ''.join(re.findall(r'\S', string))
print(no_blank_str)
# (python)-12345|张三# 匹配 Unicode 单词类字符
un_str = ''.join(re.findall(r'\w', string))
print(un_str)
# python12345张三# 匹配非单词字符的字符
no_un_str = re.findall(r'\W', string)
print(no_un_str)
# ['(', ')', '-', '\t', ' ', '\n', ' ', '\r', '|']
print('============================')

正则表达式实战笔记

print('=============正则表达式实战笔记===============')string1 = 'home/workspace/python/test.py'
# 去除最后/后面文件名,只保留路径,以下几个方法等价匹配
# print(re.sub(r'test.py', '', string1))
# print(re.sub(r'([a-z]{4}.py$)', '', string1))
print(re.sub(r'(\b[a-z]{4}.py\b)', '', string1))
# 只保留文件名
print(''.join(re.findall(r'(\b[a-z]{4}.py\b)',string1)))url_str = 'https://www.abcxyz.com/861091450/28240726.html'
# 去除最后/后面数字+.html,保留前面的url地址
print(re.sub(r'(\d+\.html\b)', '', url_str))string2 = "5,000.00伍仟元整"
# 提取数字金额
amount = re.findall(r'\d+\.?\d*', string2)
amount = ''.join(amount)
print("数字金额:", amount)
# 提取中文
ch_amount = re.findall(r'[\u4e00-\u9fa5]', string2)
ch_amount = ''.join(ch_amount)
print("中文金额:", ch_amount)# 下面列表元素有1-2个字错误,现在全部替换成统一数据
str_list3 = ['铜鼓县', '刚鼓县', '钢鼓县', '同古县', '铜古县', '铜故县']
for i in range(len(str_list3)):# 匹配替换的字符str_list3[i] = re.sub(r"(.鼓县)|(同古县)|(铜.县)", "铜鼓县", str_list3[i])
print(str_list3)
# ['铜鼓县', '铜鼓县', '铜鼓县', '铜鼓县', '铜鼓县', '铜鼓县']
print('============================')work_date = '610012 星期二 : 2023-06-12 14:23:30 1.0212'
# 只取日期数据 : 2023-06-12
work_date = re.findall(r'\d{4}-\d{1,2}-\d{1,2}',work_date)[0]
print(work_date)str_url = 'https://www.abcxyz.com/60abc12.html'
# 提取url中间的代码数据 : 60abc12
str_code = re.findall(r'https://www.abcxyz.com/(.*?).html', str_url)[0]
print(str_code)

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

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

相关文章

C# halcon SubImage的使用

SubImage(HObject imageMinuend, HObject imageSubtrahend, out HObject imageSub, HTuple mult, HTuple add) 公式 x1imageMinuend此行此列的灰度 x2imageSubtrahend此行此列的灰度 则imageSub此行此列的灰度为;(x1-x2)*multadd 溢出裁剪 以byte图为例&#xff0c;小于0&a…

nmp ERR! code ERR SOCKET TIMEOUT nmp ERR!network npmSocket timeout(已解决)

当安装vue-cli时&#xff0c;出现超时错误 npm ERR! code ECONNRESET npm ERR! network This is a problem related to network connectivity npm ERR! code ECONNRESET npm ERR! network aborted npm ERR! network This is a problem related to network connectivity. npm E…

用go实现一个循环队列

目录 队列数组队列的“假溢出”现象循环队列三种判断队列空和满的方法无下标&#xff08;链式&#xff09;有下标&#xff08;顺序&#xff09;长度标记 go用顺序表实现一个循环队列队列的链式存储结构 队列 队列&#xff08;queue&#xff09;是只允许在一端进行插入操作&…

Python—下载清华大学鹏城实验室遥感数据

当想下载清华大学鹏城实验室10m土地利用数据的时候&#xff0c;发现他们的下载方式很奇怪&#xff0c;只能一页页的点名称全选 &#xff0c;然后批量下载&#xff0c;再一个个的加入浏览器下载&#xff0c;当一次下载过多就回卡顿和下载失败&#xff0c;所以就有了想用python进…

实战:用激活函数、Keras框架解决分类问题

文章目录 实战&#xff1a;用激活函数、Keras框架解决分类问题介绍数据加载数据预处理模型设计模型编译模型训练模型评价总结 实战&#xff1a;用激活函数、Keras框架解决分类问题 介绍 本文将介绍如何使用激活函数和Keras框架解决分类问题。分类问题是机器学习中的一种基本问…

<el-input-number>显示两位数字;如果是一位数字的话前面补0

可以通过自定义 formatter 函数来实现。具体步骤如下&#xff1a; 在 <el-input-number> 上添加 :formatter 属性&#xff0c;值为 formatter 函数名。 在 methods 中定义 formatter 函数&#xff0c;该函数接收一个参数 value&#xff0c;表示当前输入框中的值。 在 f…

ElementUI浅尝辄止26:Notification 通知

悬浮出现在页面角落&#xff0c;显示全局的通知提醒消息。 1.如何使用&#xff1f; 适用性广泛的通知栏 //Notification 组件提供通知功能&#xff0c;Element 注册了$notify方法&#xff0c;接收一个options字面量参数&#xff0c;在最简单的情况下&#xff0c;你可以设置tit…

C++项目实战——基于多设计模式下的同步异步日志系统-①-项目介绍

文章目录 专栏导读项目介绍开发环境核心技术环境搭建日志系统介绍1.为什么需要日志系统2.日志系统技术实现2.1同步写日志2.2异步写日志 专栏导读 &#x1f338;作者简介&#xff1a;花想云 &#xff0c;在读本科生一枚&#xff0c;C/C领域新星创作者&#xff0c;新星计划导师&a…

Java23种设计模式之【单例模式】

目录 一.单例模式的起源&#xff0c;和应用场景 1.单例模式的前世今生&#xff01; 2.什么是单例模式&#xff1f; 2.1使用单例模式的注意事项 2.2如何理解单例模式&#xff1f; 2.3单例模式的优势以及不足&#xff01; 2.4使用场景 二.实现 1.实现思路 1.1创建一个 S…

基于SSM的网络游戏公司官方平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

python实现zscore归一化和minmax标准化

zscore归一化&#xff1a; minmax from sklearn import preprocessing from sklearn.preprocessing import StandardScaler import numpy as np# 数据 x np.array([[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]]) print(----------------minmaxscaler标准化-------------) # 调用minma…

初始化一个 vite + vue 项目

创建项目 首先使用以下命令创建一个vite项目 npm create vite然后根据提示命令 cd 到刚创建的项目目录下&#xff0c;使用npm install安装所需要的依赖包&#xff0c;再使用npm run dev即可启动项目 配置 vite.config.js 添加process.env配置&#xff0c;如果下面 vue-route…

mysql课堂笔记 mac

目录 启动mac上的mysql 进入mysql mac windows 创建数据库 创建表 修改字段数据类型 修改字段名 增加字段 删除字段 启动mac上的mysql sudo /usr/local/mysql/support-files/mysql.server start 直接输入你的开机密码即可。 编辑 进入mysql mac sudo /usr/local…

Java认识异常(超级详细)

目录 异常的概念和体系结构 异常的概念 异常的体系结构 异常的分类 1.编译时异常 2.运行时异常 异常的处理 防御式编程 LBYL EAFP 异常的抛出 异常的捕获 异常声明throws try-catch捕获并处理 finally 异常的处理流程 异常的概念和体系结构 异常的概念 在Java中…

一篇文章教会你如何降低代码的冗余度——探索指针数组,数组指针,函数指针,函数指针数组,回调函数的奥妙

前言&#xff1a;人们总说指针是c语言的灵魂&#xff0c;是因为指针的使用技巧是“千姿百态”的&#xff0c;程序员可以通过指针来直接访问内存&#xff0c;这就赋予了它功能的多样性以及更多意想不到的编程技巧与方式&#xff0c;在本篇文章中&#xff0c;笔者就给大家带来指针…

嵌入式Linux驱动开发(LCD屏幕专题)(二)

一、结合APP分析LCD驱动程序 1、open app: open("/dev/fb0", ...) 主设备号: 29, 次设备号: 0 -------------------------------------------------------------- kernel:fb_open // fbmem.cstruct fb_info *info;info get_fb_info(fbidx);if (info->fbop…

关于B+树

在数据库管理系统中&#xff0c;使用b树作为索引的数据结构&#xff0c;相比于B树和二叉树&#xff0c;有以下几个好处&#xff1a; b树的非叶子节点只存储关键字和指针&#xff0c;不存储数据&#xff0c;这样可以增加每个节点的关键字数量&#xff0c;降低树的高度&#xff…

VB:顺序查找

VB&#xff1a;顺序查找 Private Sub Command1_Click()Dim i%, m%Dim x(1 To 10) As SingleFor i 1 To 10x(i) Val(InputBox("请输入"))Next im seqSearch(x, 10)If (m 1) ThenPrint "已找到"ElsePrint "未找到"End If End Sub Function se…

Altium 高级技巧 在扁平原理图中创建多个ROOM

Altium 的 ROOM 这个特性非常有用&#xff0c; 使用ROOM在编辑PCB时&#xff0c;可以很方便的整体拖动局部器件和电路图&#xff0c;为模块化电路设计提供便利 常规的设计模式应该采用垂直模式&#xff0c; 由顶层-中间层-底层&#xff0c; 顶层设计整体的框图连接&#xff…

插入排序(Java实现)

前言 稳定性&#xff1a;如果一个排序是稳定的&#xff0c;是可以变成不稳定的&#xff0c;此时这个排序归结为稳定&#xff0c;但是如果这个排序本身是不稳定的&#xff0c;是不可以变成稳定的&#xff0c;此时这个排序是不稳定的。 过程&#xff1a;如果数组中只有一个元素&a…