正则表达式中的特殊字符

正则表达式中的特殊字符

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

作者:神的孩子都在歌唱

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

字符类

  • [] :定义字符类,用于匹配方括号内的任意一个字符。
    • 示例:[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

转义字符

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

示例

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

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

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

相关推荐
-银雾鸢尾-几秒前
C#中的抽象类与抽象方法
开发语言·c#
萧瑟余晖10 分钟前
JDK 20 新特性详解
java·开发语言
benchmark_cc12 分钟前
如何用 Python 进行多周期 K 线合成与时区对齐?基于 QuantDash 与 Pandas 的量化数据清洗实战(附 GitHub 源码)
开发语言·python·github·盯盘·pandas·quantdash·量化数据
2301_7944615727 分钟前
Activiti/BPMN 2.0 的 4 种网关
java·服务器·开发语言
147API34 分钟前
Claude Tag 进入 Slack 后,团队智能体需要哪些任务与审计字段
java·开发语言·数据库
熬夜苦读学习43 分钟前
QT_信号和槽
开发语言·qt
代码雕刻家1 小时前
编程语法细节
java·c语言·开发语言
j7~1 小时前
【C++】C++ 继承全解析:从基本语法到菱形继承的底层原理
开发语言·c++·继承·组合·虚继承·#暑假·七月创作之星博客挑战赛
数行拙笔1 小时前
C++客户端---String类型
开发语言·c++·bootstrap
影寂ldy1 小时前
C# Task 进阶:WaitAll / WaitAny / WhenAll / WhenAny
开发语言·c#