正则表达式的元字符(有功能的符号)

ops/2024/12/18 13:23:03/

通配符 : .

叫通配符、万能通配符,匹配1个除了换行符\n以外的任意原子符号

字符集:[] : 只能匹配一个

例如 [a-z]匹配a到z中任何一个

python"># 通配符 .
data = "a 12 32 你好 221 a fbd facdsd c231 dda 测试 f d"
# 匹配以f开头,以d结尾的字符串
res = re.findall("f.d", data)
print(res)  # ['fbd', 'f d']
res = re.findall("f..d", data)
print(res)  # ['facd']

重复元字符: *  + ? {}

{} :匹配指定次数

{} 中间填写重复的数量

? 有2个功能 1:取消贪婪匹配 2:匹配0-1次

PS:默认贪婪匹配:当我们的筛选条件存在多个匹配量的时候,以最大的匹配量进行显示

*  重复0-无穷次

+ 重复1-无穷次

python"># 重复元字符 :* + ? {}
data = "a fdf 你好 221 a fbd facdsd c231 dda 测试 f d"
# 匹配数字
res1 = re.findall("\d", data)
print(res1)  # ['1', '2', '3', '2', '2', '2', '1', '2', '3', '1']
# 若不用重复的,则会将数据中数字匹配一位拿出
# {} 中间填写重复的数量
res2 = re.findall("\d{2}", data)
print(res2)  # ['12', '32', '22', '23']
# 匹配以f开头,以d结尾的字符串
# fd中并不明确几个字符
# 1,3表示最少匹配1次,最多匹配3次
res3 = re.findall("f.{1,3}d", data)
print(res3)  # ['fbd', 'facd', 'f d']
# 匹配以f开头,以d结尾的字符串
# * 重复0-无穷次、
# 贪婪匹配
res4 = re.findall("f.*d", data)
print(res4)  # ['fdf 你好 221 a fbd facdsd c231 dda 测试 f d']
# ? 取消贪婪匹配
res5 = re.findall("f.*?d", data)
print(res5)  # ['fd', 'f 你好 221 a fbd', 'facd', 'f d']
# + 匹配1 - 无穷次
res6 = re.findall("f.+?d", data)
print(res6)  # ['fdf 你好 221 a fbd', 'facd', 'f d']
# ? 俩个功能 : 1 重复0-1次 2 取消贪婪匹配
res7 = re.findall("f.?d", data)
print(res7)  # ['fd', 'fbd', 'f d']
^ 
1:叫做开始边界,匹配一行开头的位置 
2:放在一个特定字符中会代表取反 例如:[^a-z] 代表取除了a-z之外的 $ 叫做结束边界,匹配一行结尾的位置
python">path = "/ccc/2022/12"
# 匹配出年月,并且开头是/ccc/,并且结尾是月份
reg = "^/ccc/[0-9]{4}/[0-9]{1,2}$"
res = re.findall(reg, path)
print(res) # ['/ccc/2022/12']

转义符 \

python">s = "hello world 23 w q233 wew 21324  wqqw 322 app1wa"
# 匹配数字
# res = re.findall("\\d+", s)
res = re.findall(r"\d+", s)
print(res)  # ['23', '233', '21324', '322', '1']
# 匹配字母数字下划线
res1 = re.findall(r"\w+", s)
print(res1)  # ['hello', 'world', '23', 'w', 'q233', 'wew', '21324', 'wqqw', '322', 'app1wa']
# \b 匹配单词边界
a = "The cat sat on the caterpillar. i love cat!"
# 匹配单词cat
ret = re.findall(r"cat", a)
print(ret)  # ['cat', 'cat', 'cat']
ret1 = re.findall(r"\bcat\b", a)
print(ret1)  # ['cat', 'cat']

取消特殊功能符号以普通化

python"># 取消符号特殊化,以普通化
c = "https://www.baidu.com/,https://wwwwwwcos.baidu.com/"
ret2 = re.findall(r"https?://www\.[a-z]*?\.com/", c)
print(ret2)  # ['https://www.baidu.com/']

() 分组与优先提取

| 或

?: 在括号前加?: 不会提取括号中的内容

python"># ()分组与优先提取
a = "apple banana peach orange aaa appleappleapple appleapple"
# 找出2个以上连续apple在一起的字符串
ret = re.findall(r"(?:apple){2,3}", a)
print(ret)  # ['appleappleapple', 'appleapple']
# | 或
# 匹配单个apple或者banana
ret1 = re.findall(r"\bapple\b|\bbanana\b", a)
print(ret1)  # ['apple', 'banana']
ret2 = re.findall(r"\b(?:apple|banana)\b", a)
print(ret2)  # ['apple', 'banana']
# ?: 在括号前加?: 不会提取括号中的内容

python中re模块的常用函数

python">"""
re.match(pattern, string, flags=0) :从字符串的起始位置匹配
re.search(pattern, string, flags=0) :从字符串的任意位置匹配
re.findall(pattern, string, flags=0) :返回所有匹配项的列表
re.split(pattern, string, maxsplit=0, flags=0) :按照正则表达式匹配的分隔符,将字符串分割成列表
re.sub(pattern, repl, string, count=0, flags=0) :替换字符串
re.subn(pattern, repl, string, count=0, flags=0) :替换字符串
re.compile(pattern, flags=0) :编译正则表达式,返回一个正则表达式对象
"""
"""
re.search返回一个match对象
对象.group() :返回匹配项的字符串
对象.start() :返回匹配项的开始位置
对象.end() :返回匹配项的结束位置
"""
# 有名分组
"""
在正则表达式中,使用()括起来的部分,会被命名为一个组。
在匹配时,这些组会被提取出来,以供后续使用。(?P<outer ip> 规则) 分组名字为outer ip名字
通过re.search返回一个match对象
对象.group(outer ip(所起的分组名)) :返回匹配项的字符串
"""
# match
"""
re.match(pattern, string, flags=0) :从字符串的起始位置匹配"""# re.compile
"""
re.compile(pattern, flags=0) :编译正则表达式,返回一个正则表达式对象
写法:
# 规则对象
obj = re.compile(r"(?P<outer ip>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})")
# 规则对象.re方法
obj.search("outer ip: 192.168.1.1")高效率
"""

文章来源:https://blog.csdn.net/m0_61810345/article/details/144409569
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/ops/142916.html

相关文章

Linux 打印队列功能解析

在 Linux 系统中&#xff0c;打印队列是一个管理和处理打印任务的机制。通过打印队列&#xff0c;用户可以将多个打印任务排队等待打印机处理&#xff0c;而打印机按顺序处理这些任务。Linux 使用 CUPS&#xff08;Common UNIX Printing System&#xff09;或 LPD&#xff08;L…

vite配置tailwindcss

这里以vue3为例&#xff0c;其他的框架只要是vite配置的也可参考这个 项目创建 Vite 需要 Node.js 版本 18 或 20 npm create vitelatest my-vue-app创建完执行命令运行项目 cd my-vue-appnpm installnpm run dev项目正常运行即可 安装和初始化tailwindcss相关插件 安装相…

Java面试之单例模式浅谈

单例模式是Java面试中常会问到的一个问题&#xff0c;众所周知&#xff0c;单例模式分为两大部分&#xff1a;饿汉模式和懒汉模式。但是&#xff0c;如果当面试官问道关于单例模式的话&#xff0c;如果你只答出这两种模式&#xff0c;且懒汉模式还是最基础最简陋版的话&#xf…

微服务引擎 (MSE)

微服务引擎 (MSE) 是阿里云提供的一款用于构建、管理和运维微服务架构的全托管平台服务。它帮助企业快速构建并管理微服务应用&#xff0c;提供丰富的微服务治理、服务注册与发现、流量管理、弹性伸缩等功能&#xff0c;极大简化了微服务架构的部署和运维工作。 以下是微服务引…

单步调试Android Framework——App冷启动

纸上得来终觉浅&#xff0c;绝知此事要躬行。 —— [宋]陆游 基于aosp_cf_x86_64_phone-trunk_staging-eng &#xff0c; 下面是具体断点位置。 第一部分&#xff0c;桌面launcher进程 com.android.launcher3.touch.ItemClickHandler onClickonClickAppShortcutstartAppShor…

6. 日常算法

1. 104. 二叉树的最大深度 题目来源 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 class Solution { public:int max_depth(TreeNode* root){if (root nullptr) return 0;return max(max_depth(root->right), max_depth(root->left)) 1;}int…

【Leetcode 每日一题 - 扩展】1326. 灌溉花园的最少水龙头数目

问题背景 在 x x x 轴上有一个一维的花园。花园长度为 n n n&#xff0c;从点 0 0 0 开始&#xff0c;到点 n n n 结束。 花园里总共有 n 1 n 1 n1 个水龙头&#xff0c;分别位于 [ 0 , 1 , . . . , n ] [0, 1, ..., n] [0,1,...,n]。 给你一个整数 n n n 和一个长度…

el-table 多表头+跨行跨列案例

效果&#xff1a; 代码&#xff1a; index.vue <template><div class"my-table"><el-tablev-loading"table.loading":data"table.data"bordersize"mini":header-cell-style"headerCellStyle":span-method&qu…