正则表达式中的特殊字符

正则表达式中的特殊字符

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

作者:神的孩子都在歌唱

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

字符类

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

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

相关推荐
\光辉岁月/18 分钟前
3.包装类
java·开发语言·包装类
波力海苔夹心脆67541 分钟前
VisionMaster 两级位置修正实战:塑料外壳与金属件装配角度检测
经验分享·计算机视觉·c#·visionmaster·海康机器人·位置修正
FRing031 小时前
JavaScript入门到精通二十四(正则表达式、元字符、修饰符)
开发语言·前端·javascript·正则表达式
西索斯coding1 小时前
Grok 4.7 调用一直 401 怎么办?不是 Key 过期,是 Authorization 头格式问题——排查全流程 + 修复示例
服务器·开发语言·ai·php
SEO_juper2 小时前
hreflang 审计工具:外贸多语言站谷歌SEO的隐性杀手
开发语言·人工智能·爬虫·python·seo
WJ.Polar2 小时前
final、单例类、枚举类、抽象类、接口
java·开发语言
小羊没烦恼!2 小时前
C#综合揭秘——Entity Framework 并发处理详解
java·开发语言·前端·javascript·数据库·mysql·c#
艾iYYY2 小时前
【无标题】
linux·开发语言·网络·操作系统
NetX行者2 小时前
Rust 初体验:一个全栈工程师的编译器“毒打“笔记
开发语言·笔记·rust
我就是不信3 小时前
Java8 lambda 表达式 forEach 如何提前终止?
开发语言·windows·python