正则表达式
文章目录
在匹配次数不确定的时候匹配模式分为贪婪和非贪婪两种。
在同一个字符串中有多种情况可以和正则匹配成功的时候,贪婪取最多的次数进行匹配,非贪婪取最少的次数进行匹配
1)贪婪:+、 、?、{M,N},{M,},{,N}默认是贪婪
2)非贪婪:+?、?、??、{N,N}?,{M,}?,{,N}
如果只能成功一次,贪婪和非贪婪是没有任何区别的
只有成功多次才有贪婪和非贪婪的区别
基础字符
\小写字母和 \大写字母 是完全相反的
\b # 在正则表达式中这个表达为边界
. # 匹配除了换行以外的任意一个字符
* # 匹配任意次数(0和任意次)
\d # 表示为单个数字位置
- # 只匹配本身
{次数} # 匹配某个字符指定次数
\s # 匹配任意空白符
\w # 字母,数字,下划线,
+ # 匹配一次或者更多次
^ # 开头(它后面的字符为开头)
$ # 结尾(它前面的字符为结尾)
\\ # 查找 \
? # 重复一次或零次(前面的是要被匹配的字符)
{n,} # 重复n次和更多次
{n, m} # 重复n次到m次
\W # 与 \w 相反
\S
\D
\B
[^x] # 匹配除了x以外的字符
\S+ # 匹配不包含空白符的字符串
<a[^>]+> # 匹配用尖括号括起来的以a开头的字符串
[] # 匹配一次中括号中的数字
?i # 忽略大小写
?s # 单行匹配
fullmatch
使用时需要先从re模块中导入
格式:fullmatch(正则表达式,字符串)
只有完全匹配才会输出,不匹配输出空(整个需要匹配的字符串必须和正则一摸一样才会返回对象)
可以用来进行正则判断,判断用户输入的是否为指定格式但是不适合去提取字符
#3.\d
匹配任意一个数字字符
result fullmatch(r'a\d\db','a29b')
print(result)
#4.\s
匹配任意一个空白字符
#空白字符:所有能产生空白效果的字符(空格、回车、水平制表符)
result fullmatch(r'a\sb','a\nb')
print(result)
#5.\w
匹配任意一个数字、字母、下划线或者中文
result fullmatch(r'a\wb','ab)
print(result)
5. `re.fullmatch(pattern, string, flags=0)`**: 检查整个字符串是否与模式完全匹配,如果是,返回一个匹配对象;否则,返回 `None`。
可以使用哦个 变量.group()获取匹配解雇
match
match(正则表达式, 字符串)
只匹配开头成功就返回对象,不成功就返回空
可以使用group来提取数据
`re.match(pattern, string, flags=0)`
尝试从字符串的开头匹配模式,如果匹配成功,返回一个匹配对象;否则,返回 `None`。
compile函数
用于编译正则表达式,生成一个正则对象供match和search使用
search函数
扫描整个字符串并返回胡第一个成功的匹配,没有匹配就返回nong
2. `re.search(pattern, string, flags=0)`**: 在字符串中搜索模式的任何位置,如果找到匹配,返回一个匹配对象;否则,返回 `None`。
compile函数
你可以使用 re.compile()
函数来将正则表达式模式编译为一个可重复使用的正则对象。
pattern = re.compile(r'正则表达式模式')
使用编译后的正则对象来查找匹配文本中的子串。search()
函数将返回第一个匹配项,而 findall()
函数将返回所有匹配项。
match = pattern.search(文本)
matches = pattern.findall(文本)
findall函数
用于提取满足正则的字符, 返回列表
findall(正则表达式,字符串)-获取字符串中所有满足正则表达式的子串,返回一个列表
3. `re.findall(pattern, string, flags=0)`**: 查找字符串中的所有与模式匹配的部分,返回一个包含所有匹配的字符串列表。
finditer
4. `re.finditer(pattern, string, flags=0)`**: 与 `re.findall()` 类似,但返回一个迭代器,可以逐个迭代处理匹配对象。
你可以使用 sub()
函数来替换匹配项。
替换后的文本 = pattern.sub(正则表达式,替换字符串, 原始文本)
group
如果你想要获取匹配对象的属性,比如匹配的文本、匹配的位置等,你可以使用 group()
、start()
和 end()
等方法。
匹配文本 = match.group()
start
开始位置 = match.start()
end
结束位置 = match.end()
sub函数
`re.sub(pattern, repl, string, count=0, flags=0)`**: 使用指定的替代字符串 `repl` 替换字符串中所有与模式匹配的部分,可选参数 `count` 指定最多替换次数
subn
7. `re.subn(pattern, repl, string, count=0, flags=0)`**: 与 `re.sub()` 类似,但返回一个包含替换次数的元组。
案例:
import re
text = "Hello, my email is example@email.com and my phone number is 123-456-7890."
# 编译正则表达式模式
email_pattern = re.compile(r'\S+@\S+')
phone_pattern = re.compile(r'\d{3}-\d{3}-\d{4}')
# 查找匹配项
email_match = email_pattern.search(text)
phone_matches = phone_pattern.findall(text)
if email_match:
print("Email found:", email_match.group())
if phone_matches:
print("Phone numbers found:", phone_matches)
# 替换匹配项
new_text = phone_pattern.sub("REDACTED", text)
print("Modified text:", new_text)
总结:
这些函数允许你在字符串中执行不同类型的正则表达式匹配操作,例如从开头匹配、搜索匹配、查找所有匹配项、替换匹配项等。你可以根据具体的需求选择适当的函数。每个函数都接受一个正则表达式模式和一个要搜索的字符串,以及一些可选的标志参数,这些标志可以用于控制匹配的方式。
fullmatch(正则表达式,字符串)
完全匹配(匹配整个字符串),匹配成功返回匹配对象,匹配失败返回Noe
match(正则表达式,字符串)
匹配字符串开头,匹配成功返回匹配对象,匹配失败返回None
search(正则表达式,字符串)
匹配字符串中第一个满足正则规则的子串,匹配成功返回匹配对象,匹配失败返回oe
findal1(正则表达式,字符串)
提取字符串中所有满足正则的子串(如果正则中有fn
finditer(正则表达式,字符串)
sp1it(正则表达式,字符串)
fen
sUb(正则表达式,字符串1,字符串2)
1.分2.份3.粉4.芬5.'
分组
部分内容整体操作
转义字符
在正则中转义字符的意义式让原本具备特殊意义的字符失去本身的功能
#'233.82939','1.2334'
print(fullmatch(r'\d+\.\d+','234.45')) # 在数字中匹配一个点
#'2838+273'
print(fullmatch(r'\d+\+\d+','23+34')) # 咋数字中匹配一个加号
#'(KSH)'
print(fullmatch(r'([A-Z]{3}\)','(JKS)'))
#\dMK \dKH
print(fullmatch(r'\\d[A-Z]{2}','\dKL'))
#'\'=='\\'
#2.[]
#单独存在有特殊意义的符号在[]中对应的功能会自动消失,变成一个普通符号
print(fullmatch(r'[.+?*$]\d{3}','m345'))