正则表达式中的特殊字符

正则表达式中的特殊字符

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

作者:神的孩子都在歌唱

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

字符类

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

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

相关推荐
Swift社区2 小时前
在 Swift 中实现字符串分割问题:以字典中的单词构造句子
开发语言·ios·swift
没头脑的ht2 小时前
Swift内存访问冲突
开发语言·ios·swift
没头脑的ht2 小时前
Swift闭包的本质
开发语言·ios·swift
小吴同学·2 小时前
.NET6 WebApi第1讲:VSCode开发.NET项目、区别.NET5框架【两个框架启动流程详解】
c#·.netcore·.net core
wjs20242 小时前
Swift 数组
开发语言
stm 学习ing3 小时前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
湫ccc4 小时前
《Python基础》之字符串格式化输出
开发语言·python
mqiqe5 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql
AttackingLin5 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python