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

正则表达式中的特殊字符

正则表达式中的特殊字符

      • 字符类
      • 预定义字符类
      • 量词
      • 锚点
      • 分组和捕获
      • 选择、分支和条件
      • 反义和否定
      • 转义字符
      • 示例

这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。

作者:神的孩子都在歌唱

在正则表达式中,有许多特殊字符用于定义匹配模式。以下是常用的正则表达式特殊字符及其解释。

字符类

  • []:定义字符类,用于匹配方括号内的任意一个字符。
    • 示例:[abc] 匹配 abc
  • -:在字符类中表示范围。
    • 示例:[a-z] 匹配任何小写字母。

预定义字符类

  • .:匹配除换行符外的任意一个字符。
  • \d:匹配任意一个数字,等价于 [0-9]
  • \D:匹配任意一个非数字字符,等价于 [^0-9]
  • \w:匹配任意一个单词字符(字母、数字或下划线),等价于 [a-zA-Z0-9_]
  • \W:匹配任意一个非单词字符,等价于 [^a-zA-Z0-9_]
  • \s:匹配任意一个空白字符(空格、制表符、换行符等)。
  • \S:匹配任意一个非空白字符。

量词

  • *:匹配前面的字符零次或多次。
    • 示例:a* 匹配 ""aaaaaa 等。
  • +:匹配前面的字符一次或多次。
    • 示例:a+ 匹配 aaaaaa 等。
  • ?:匹配前面的字符零次或一次。
    • 示例:a? 匹配 ""a
  • {n}:匹配前面的字符恰好 n 次。
    • 示例:a{3} 匹配 aaa
  • {n,}:匹配前面的字符至少 n 次。
    • 示例:a{2,} 匹配 aaaaaaaaa 等。
  • {n,m}:匹配前面的字符至少 n 次且至多 m 次。
    • 示例:a{2,4} 匹配 aaaaaaaaa

锚点

  • ^:匹配字符串的开始。
    • 示例:^abc 匹配以 abc 开头的字符串。
  • $:匹配字符串的结束。
    • 示例:abc$ 匹配以 abc 结尾的字符串。
  • \b:匹配单词边界。
    • 示例:\bword\b 匹配 word,但不匹配 swordwords
  • \B:匹配非单词边界。
    • 示例:\Bword\B 匹配 swordsmith 中的 word

分组和捕获

  • ():定义分组,并捕获匹配的子字符串。
    • 示例:(abc) 匹配并捕获 abc
  • (?:):定义分组,但不捕获匹配的子字符串。
    • 示例:(?:abc) 匹配但不捕获 abc

选择、分支和条件

  • |:表示选择或分支。
    • 示例:a|b 匹配 ab
  • (?=...):正向前瞻断言,匹配 ... 前的位置。
    • 示例:a(?=b) 匹配 a,但仅当 a 后面跟着 b
  • (?!...):负向前瞻断言,匹配不为 ... 前的位置。
    • 示例:a(?!b) 匹配 a,但仅当 a 后面不跟着 b

反义和否定

  • ^:在字符类中表示反义。
    • 示例:[^abc] 匹配除 abc 之外的任意字符。
  • (?<=...):正向后瞻断言,匹配 ... 后的位置。
    • 示例:(?<=a)b 匹配 b,但仅当 b 前面是 a
  • (?<!...):负向后瞻断言,匹配不为 ... 后的位置。
    • 示例:(?<!a)b 匹配 b,但仅当 b 前面不是 a

转义字符

  • \:用于转义特殊字符,使其作为普通字符处理。
    • 示例:\. 匹配 . 字符,而不是任意字符。

示例

以下是一些示例来展示如何使用上述特殊字符:

import re# 匹配任意单个字符
pattern = re.compile(r'.')
print(pattern.match('a').group())  # 输出: a# 匹配任意数字
pattern = re.compile(r'\d')
print(pattern.match('5').group())  # 输出: 5# 匹配单词边界上的单词
pattern = re.compile(r'\bword\b')
print(pattern.search('A word in a sentence').group())  # 输出: word# 匹配以 abc 开头的字符串
pattern = re.compile(r'^abc')
print(pattern.match('abcde').group())  # 输出: abc# 匹配以 xyz 结尾的字符串
pattern = re.compile(r'xyz$')
print(pattern.search('123xyz').group())  # 输出: xyz# 匹配包含 "hello" 或 "world" 的字符串
pattern = re.compile(r'hello|world')
print(pattern.search('hello world').group())  # 输出: hello# 匹配以数字开头且包含一个或多个空白字符的字符串
pattern = re.compile(r'^\d\s+')
print(pattern.match('5    ').group())  # 输出: 5    # 匹配字符串中的邮箱地址
pattern = re.compile(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b')
print(pattern.search('My email is example@test.com').group())  # 输出: example@test.com

作者:神的孩子都在歌唱

本人博客:https://blog.csdn.net/weixin_46654114

转载说明:务必注明来源,附带本人博客连接。

http://www.lryc.cn/news/450524.html

相关文章:

  • EP42 公告详情页
  • 游戏找不到xinput1_3.dll的原因及解决方法
  • 防反接电路设计
  • SpringMVC源码-AbstractHandlerMethodMapping处理器映射器将@Controller修饰类方法存储到处理器映射器
  • 毕业设计选题:基于ssm+vue+uniapp的购物系统小程序
  • 【动态规划-最长公共子序列(LCS)】力扣583. 两个字符串的删除操作
  • 【分布式微服务云原生】8分钟探索RPC:远程过程调用的奥秘与技术实现
  • Linux操作系统中Redis
  • 每日论文5—06TCAS2锁相环电流匹配的gain-boosting电荷泵
  • 接口隔离原则(学习笔记)
  • 基于ESP8266—AT指令连接阿里云+MQTT透传数据(1)
  • 强化学习-python案例
  • Element UI教程:如何将Radio单选框的圆框改为方框
  • vue3结合 vue-router和keepalive实现路由跳转保持滚动位置不改变(超级简易清晰)
  • PostgreSQL 字段使用pglz压缩测试
  • 基于大数据的学生体质健康信息系统
  • 【STM32】 TCP/IP通信协议(1)--LwIP介绍
  • 828华为云征文|部署音乐流媒体服务器 mStream
  • 【动态规划-最长公共子序列(LCS)】力扣712. 两个字符串的最小ASCII删除和
  • override
  • 万象奥科工业平板上线,邀您体验与众不同!
  • java将word转pdf
  • Golang | Leetcode Golang题解之第449题序列化和反序列化二叉搜索树
  • 基于SpringBoot+Vue+MySQL的美食信息推荐系统
  • spring boot jar 分离自动部署脚本
  • PGMP-03战略一致性
  • 华为OD机试真题---智能成绩表
  • 828华为云征文 | 华为云Flexus云服务器X实例搭建企业内部VPN私有隧道,以实现安全远程办公
  • Hadoop集群的高可用(HA):NameNode和resourcemanager高可用的搭建
  • 支付宝沙箱环境 支付