正则表达式中的特殊字符

正则表达式中的特殊字符

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

作者:神的孩子都在歌唱

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

字符类

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

预定义字符类

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

量词

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

锚点

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

分组和捕获

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

选择、分支和条件

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

反义和否定

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

转义字符

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

示例

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

python 复制代码
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

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

相关推荐
asdzx67几秒前
Excel 水印方案对比:页眉图片 vs 背景图片(附 C# 实现)
c#·excel
影寂ldy10 分钟前
C# TCP转串口Modbus网关终极完整版笔记(队列防抖+一问一答+帧解析+双客户端轮询)
笔记·tcp/ip·c#
88号技师12 分钟前
2026年9月SCI-天气状态蚂蚁优化算法Weather State Ants Optimizer-附Matlab免费代码
开发语言·算法·matlab·优化算法
孙启超13 分钟前
【AI开发之Rust】第 20 课:壳侧 API 封装 —— 把 Rust 能力接进真实 UI
开发语言·后端·rust
CarIise37 分钟前
MyBatis缓存与分页插件:从一级二级缓存到底层原理与PageHelper实战
java·开发语言·spring
chenbingjie_c8 小时前
C++ 进阶核心知识点总结:模板、内存分区、new/delete、内存池
开发语言·c++
Escalating_xu9 小时前
【C 语言】深入理解指针(1·下):指针运算、野指针、assert 与传址实战
java·c语言·开发语言
实心儿儿9 小时前
Qt — Qt 事件
开发语言·qt
周杰偷奶茶9 小时前
【Java】数据类型与变量
java·开发语言