正则表达式中的特殊字符

正则表达式中的特殊字符

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

作者:神的孩子都在歌唱

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

字符类

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

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

相关推荐
方璧4 小时前
限流的算法
java·开发语言
Hi_kenyon4 小时前
VUE3套用组件库快速开发(以Element Plus为例)二
开发语言·前端·javascript·vue.js
曲莫终4 小时前
Java VarHandle全面详解:从入门到精通
java·开发语言
一心赚狗粮的宇叔4 小时前
中级软件开发工程师2025年度总结
java·大数据·oracle·c#
ghie90905 小时前
基于MATLAB GUI的伏安法测电阻实现方案
开发语言·matlab·电阻
Gao_xu_sheng5 小时前
Inno Setup(专业安装/更新 EXE)
开发语言
cplmlm5 小时前
EF Core使用CodeFirst生成postgresql数据库表名以及字段名用蛇形命名法,而类名仍使用驼峰命名
c#
吴声子夜歌6 小时前
Java数据结构与算法——基本数学问题
java·开发语言·windows
wanglei2007086 小时前
生产者消费者
开发语言·python