正则表达式和re模块
正则表达式(Regular Expression,简称Regex或RegExp)是计算机科学中的一个重要概念,它通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式是对字符串操作的一种逻辑公式,通过事先定义好的一些特定字符以及这些特定字符的组合,来组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式的语法和规则因不同的编程语言和工具而异,但大多数都遵循一些基本的语法和规则。以下是一些常见的正则表达式语法和规则:
字符匹配:.
匹配除换行符以外的任意字符。
位置匹配:^
匹配输入字符串的开始位置,$
匹配输入字符串的结束位置。
数量词:*
表示匹配前面的元素零次或多次,+
表示匹配前面的元素一次或多次,?
表示匹配前面的元素零次或一次。
字符集:[]
定义字符集,匹配括号内的任意一个字符。
预定义字符类:如\d
、\w
、\s
等,用于匹配特定类型的字符。
分组和引用:使用圆括号()
进行分组,可以将表达式组合为一个子表达式,并可以在后续操作中引用这个子表达式的匹配结果。
re模块
Python 中的 re
模块(Regular Expression 模块)是一个标准库,用于支持正则表达式。正则表达式是一种文本模式,用于匹配字符串中字符组合的模式。它可以帮助你搜索、编辑或操作文本和数据,以实现复杂的文本处理任务。
引入re模块
import re
re
模块提供了一系列函数和方法来处理正则表达式。以下是一些常用的:
match方法
尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none。
# 导入re模块
import re
# 设置正则表达式匹配规则
pattern = re.compile(r'\d+')
# 匹配的目标文本,没有匹配到,则终止匹配,由于字母o不是数字,因此,无匹配数据
m1 = pattern.match('one123two456three789')
print(m1)
# 参数1:匹配的起始位置,下表数包含
# 参数2:匹配的结束位置,下标数不包含
m1 = pattern.match('one123two456three789', 3, 6)
print(m1.group()) # 通过group查看匹配的数据
search方法
扫描整个字符串并返回第一个成功的匹配。
import re
pattern = re.compile(r'\d+')
# 它是一次匹配,只要找到了一个匹配的结果就返回,不是查找所有匹配的结果
m1 = pattern.search('one123two456three789')
print(m1.group())
findall方法
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
import re
pattern = re.compile(r'[a-z]+')
# findall 方法用于搜索整个字符串,获得所有匹配的结果
result = pattern.findall('hello 123 world 456')
print(result)
spilt方法
通过正则表达式将字符串分割为一个列表。
import re
str = 'a,b,c'
print(str.split(','))
str1 = 'a,b;; c,d'
pattern = re.compile('[\s\,\;]+')
print(pattern.split(str1))
sub方法
替换字符串中所有匹配正则表达式的子串。
import re
string = '<h1 class="test">helloWorld</h1>'
pattern = re.compile(r'\d')
# 参数1:替换后的值 参数2:原值
print(pattern.sub('2',string))
# 参数3:替换几个
print(pattern.sub('2',string,2))
# 分组
string = '<h1 class="test">helloWorld</h1>'
# P<classname>为组声明名字,可以通过名字调用该组
pattern = re.compile(r'<(.\d)\sclass="(?P<classname>.*?)">.*?</(.1)>')
print(pattern.search(string).group(1))
print(pattern.search(string).group(2))
print(pattern.search(string).group(3))
compile
编译一个正则表达式模式,返回一个正则表达式的匹配对象,通过它可以使用匹配对象的方法。