当前位置: 首页 > news >正文

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)

相关文章:

python正则表达式笔记2

由 \ 和一个字符组成的特殊序列在以下列出。 如果普通字符不是ASCII数位或者ASCII字母&#xff0c;那么正则样式将匹配第二个字符。比如&#xff0c;\$ 匹配字符 $. \number 匹配数字代表的组合。每个括号是一个组合&#xff0c;组合从1开始编号。 比如 (.) \1 匹配 the the 或…...

matplotlib 的默认字体和默认字体系列

matplotlib 的默认字体和默认字体系列 查看默认字体和默认字体系列查看默认字体系列下包含的字体查看 plt.rcParams 设置的所有参数查看所有支持的字体格式设置默认字体方法1&#xff1a;方法2 今天给大家介绍一下 matplotlib 包中的默认字体以及默认字体系列。 查看默认字体和…...

STMCUBEMX_IIC_DMA_AT24C64读取和写入

STMCUBEMX_IIC_DMA_AT24C64读取和写入 说明&#xff1a; 1、此例程只是从硬件IIC升级到DMA读写&#xff0c;因为暂时存储的掉电不丢失数据不多&#xff0c;一页就可以够用&#xff0c;不用担心跨页读写的问题 2、使用DMA后&#xff0c;程序确实是变快了&#xff0c;但是也要注意…...

wsl2相关问题

磁盘空间 wsl 删除相关文件后&#xff0c;如删除docker 无用的容器和镜像&#xff0c;windows上磁盘仍然无法自动回收空间 &#xff08;参考&#xff1a;[microsoft/WSL](https://github.com/microsoft/WSL/issues/4699#issuecomment-627133168)&#xff09; # 如清除无用do…...

使用idea时,光标变成了不能按空格键,只能修改的vim格式,怎么切换回正常光标

情况1 你可能不小心启用了 IntelliJ IDEA 中的 Vim 插件。你可以尝试以下步骤来禁用它&#xff1a; 在 IntelliJ IDEA 中&#xff0c;选择 "File" -> "Settings" &#xff08;如果你在 macOS 上&#xff0c;选择 "IntelliJ IDEA" -> &quo…...

vue+antd——实现table表格的打印——分页换行,每页都有表头——基础积累

这里写目录标题 场景效果图功能实现1&#xff1a;html代码功能实现2&#xff1a;css样式功能实现3&#xff1a;js代码补充内容page-break-inside 属性page-break-after属性page-break-before 属性 场景 最近在写后台管理系统时&#xff0c;遇到一个需求&#xff0c;就是要实现…...

linux C MD5计算

#include <stdio.h> #include <string.h> #include <openssl/md5.h>int main() {char str[] "Hello, world!"; // 需要计算MD5哈希值的字符串unsigned char digest[MD5_DIGEST_LENGTH]; // 存储MD5哈希值的数组MD5((unsigned char*)&str, str…...

vue3学习源码笔记(小白入门系列)------ 组件更新流程

目录 说明例子processComponentcomponentUpdateFnupdateComponentupdateComponentPreRender 总结 说明 由于响应式相关内容太多&#xff0c;决定先接着上文组件挂载后&#xff0c;继续分析组件后续更新流程&#xff0c;先不分析组件是如何分析的。 例子 将这个 用例 使用 vi…...

数学建模B多波束测线问题B

数学建模多波束测线问题 1.问题重述&#xff1a; 单波束测深是一种利用声波在水中传播的技术来测量水深的方法。它通过测量从船上发送声波到声波返回所用的时间来计算水深。然而&#xff0c;由于它是在单一点上连续测量的&#xff0c;因此数据在航迹上非常密集&#xff0c;但…...

Pytest 框架执行用例流程浅谈

背景&#xff1a; 根据以下简单的代码示例&#xff0c;我们将从源码的角度分析其中的关键加载执行步骤&#xff0c;对pytest整体流程架构有个初步学习。 代码示例&#xff1a; import pytest def test_add(): assert 1 1 2 def test_sub(): assert 2 - 1 1 通过 pytes…...

C#__资源访问冲突和死锁问题

/// 线程的资源访问冲突&#xff1a;多个线程同时申请一个资源&#xff0c;造成读写错乱。 /// 解决方案&#xff1a;上锁&#xff0c;lock{执行的程序段}:同一时刻&#xff0c;只允许一个线程访问该程序段。 /// 死锁问题&#xff1a; /// 程序中的锁过多&#xf…...

机器学习——Logistic Regression

0、前言&#xff1a; Logistic回归是解决分类问题的一种重要的机器学习算法模型 1、基本原理&#xff1a; Logistic Regression 首先是针对二分类任务提出的一种分类方法如果将概率看成一个数值属性&#xff0c;则二元分类问题的概率预测就可以转化为一个回归问题。这种思路最…...

创建husky规范前端项目

创建husky规范前端项目 .husky文件是一个配置文件&#xff0c;用于配置Git钩子。Git钩子是在Git操作时触发的脚本&#xff0c;可以用于自动化一些任务&#xff0c;比如代码格式化、代码检查、测试等。.husky文件可以指定在Git的不同操作&#xff08;如commit、push等&#xff…...

深浅拷贝与赋值

数据类型 数据类型 在JavaScript中&#xff0c;数据类型有两大类。一类是基本数据类型&#xff0c;一类是引用数据类型。 基本数据类型有六种&#xff1a;number、string、boolean、null、undefined、symbol。 基本数据类型存放在栈中。存放在栈中的数据具有数据大小确定&a…...

bert ranking pairwise demo

下面是用bert 训练pairwise rank 的 demo import torch from torch.utils.data import DataLoader, Dataset from transformers import BertModel, BertTokenizer from sklearn.metrics import pairwise_distances_argmin_minclass PairwiseRankingDataset(Dataset):def __ini…...

GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图

GPT对于每个科研人员已经成为不可或缺的辅助工具&#xff0c;不同的研究领域和项目具有不同的需求。例如在科研编程、绘图领域&#xff1a;1、编程建议和示例代码: 无论你使用的编程语言是Python、R、MATLAB还是其他语言&#xff0c;都可以为你提供相关的代码示例。2、数据可视…...

SpringBoot整合Swagger3

前言 swagger是啥&#xff0c;是干什么的&#xff0c;有什么用&#xff0c;我想在这里我就不用介绍了&#xff0c;下面直接代码演示。 添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0…...

detectron2 install path

>>> import detectron2 >>> detectron2_path detectron2.__file__ >>> print(detectron2.__file__)...

如何将DHTMLX Suite集成到Scheduler Lightbox中?让项目管理更可控!

在构建JavaScript调度器时&#xff0c;通常需要为最终用户提供一个他们喜欢的方式来计划事件&#xff0c;这是Web开发人员喜欢认可DHTMLX Scheduler的重要原因&#xff0c;它在这方面提供了完全的操作自由&#xff0c;它带有lightbox弹出窗口&#xff0c;允许通过各种控件动态更…...

什么是JVM常用调优策略?分别有哪些?

目录 一、JVM调优 二、堆内存大小调整 三、垃圾回收器调优 四、线程池调优 一、JVM调优 Java虚拟机&#xff08;JVM&#xff09;的调优主要是为了提高应用程序的性能&#xff0c;包括提高应用程序的响应速度和吞吐量。以下是一些常用的JVM调优策略&#xff1a; 堆内存大小…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...