正则表达式(复习)

文章目录

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

一、[]: 一个字符集合

[] 被称为字符类,用于定义一个字符集合,匹配该集合中任意一个字符。

在方括号内列出所有可能匹配的字符,正则表达式会匹配方括号中任意一个字符。

特殊符号 含义
- 来表示一个字符范围
^ 表示排除方括号中指定的字符,例如:[ ^0-9] 非数字
\d [0-9]
\D [^0-9]
\w [a-zA-Z0-9_]
\W [^a-zA-Z0-9_]
\s 匹配任意空白字符,包括空格、制表符、换行符等
\S 匹配任意非空白字符
\b 单词边界,匹配单词的开始或结束位置,例如:\bcat\b匹配独立的单词 cat,而不会匹配 category 中的 cat
\B 非单词边界,匹配不在单词开始或结束的位置,例如:\Bing\B 对于 string 中的 ing 会匹配,而对于 sing 则不匹配

二、{}: 重复次数

{} 被称为量词,用于指定前面的元素(字符、字符类或分组)出现的次数。

特殊符号 含义
+ {1, } 1次以上
* {0,} 0次以上
? {0,1} 0次或1次、注:跟在 *+{} 等后面时,表示非贪婪匹配
. 匹配任意一个字符(换行除外)

三、特殊符号

特殊符号 含义
^ 匹配开始的字符串
$ 匹配结尾的字符串
\ 转译符,例如:\. 匹配 .\d 匹配任意数字(等价于 [0-9]
| 或者。例如:[a|b]

四、(): 分组

  1. 分组,将多个字符组合成一个整体
  2. 创建捕获组,保存匹配内容
  3. 创建非捕获组((?:)
  4. 反向引用(\数字
  1. 分组,将多个字符组合成一个整体
python 复制代码
import re

# 匹配连续出现两次的 "ab"
pattern = r'(ab){2}'
text = 'abababc'
result = re.findall(pattern, text)
print(result) 	 # ['ab']
  1. 创建捕获组,保存匹配内容
python 复制代码
import re

# 匹配日期,格式为 "年-月-日",并捕获年、月、日
pattern = r'(\d{4})-(\d{2})-(\d{2})'
text = 'Today is 2024-10-15.'
result = re.search(pattern, text)
if result:
    print("Full match:", result.group(0))	# Full match: 2024-10-15
    print("Year:", result.group(1))			# Year: 2024
    print("Month:", result.group(2))		# Month: 10
    print("Day:", result.group(3))			# Day: 15
  1. 创建非捕获组((?:)
python 复制代码
import re

# 使用非捕获组匹配 "abc" 或 "def" 后面跟着一个数字
pattern = r'(?:abc|def)\d'
text = 'abc1 def2 ghi3'
result = re.findall(pattern, text)
print(result) 		# ['abc1', 'def2']
  1. 反向引用(\数字
python 复制代码
import re

# 匹配连续出现两次相同的单词
pattern = r'(\b\w+\b)\s+\1'
text = 'hello hello world'
result = re.findall(pattern, text)
print(result) 		# ['hello']

五、python代码示例

Python中,使用re模块来实现正则表达式。

python 复制代码
import re
regex = 'a'
string = 'abc'

# 1. re.search(regex, string)
# 检查这个字符串string是否匹配正则表达式
if re.search(regex, string) is not None:
	print(string)	# abc

# 2. results = re.findall(regex, string)
# 匹配带正则表达式的那部分字符串
string = '2014 was a good year, but 2025 will be better!'
years = re.findall('[1-2][0-9]{3}', string)
print(years)	# ['2014', '2025']

# 3. result.group(0)
# 分组提取,见上面分组

六、注意

正则表达式里使用\作为转义字符

假如你需要匹配文本中的字符\,name编程语言表示的正则表达式需要4个反斜杠\\\\,前两个和后两个分别用于在编程语言中转义成反斜杠,转换成两个反斜杠后再在正则表达式中转义成一个反斜杠。Python中的原生字符串很好的解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以写成r"\d",不需要再担心是否漏写了反斜杠,写出来的表达式也更直观。

python 复制代码
import re

if re.search("\\\\", "I have one nee\dle") is not None:
    print("Match")
else:
    print("Not Match")
python 复制代码
import re

if re.search(r"\\", "I have one nee\dle") is not None:
    print("Match")
else:
    print("Not Match")
相关推荐
灏瀚星空9 分钟前
Python在AI虚拟教学视频开发中的核心技术与前景展望
人工智能·python·音视频
一个天蝎座 白勺 程序猿10 分钟前
Python爬虫(4)CSS核心机制:全面解析选择器分类、用法与实战应用
css·爬虫·python
qyresearch_12 分钟前
全球碳化硅晶片市场深度解析:技术迭代、产业重构与未来赛道争夺战(2025-2031)
大数据·人工智能
进来有惊喜21 分钟前
深度学习:迁移学习
python·深度学习
@正在学习驰骋的小马1 小时前
九、小白如何用Pygame制作一款跑酷类游戏(添加前进小动物作为动态障碍物)
python·游戏·pygame
BXCQ_xuan1 小时前
Django API 响应格式:一个新手踩坑记
python·django·状态模式
Python×CATIA工业智造1 小时前
基于CATIA参数化管道建模的自动化插件开发实践——NX建模之管道命令的参考与移植
python·pycharm·catia二次开发
猫猫头有亿点炸1 小时前
大数据可能出现的bug之flume
大数据·bug·flume
小奕同学A1 小时前
数字化技术的五个环节:大数据、云计算、人工智能、区块链、移动互联网
大数据·人工智能·云计算
蔗理苦2 小时前
2025-04-24 Python&深度学习4—— 计算图与动态图机制
开发语言·pytorch·python·深度学习·计算图