Python——正则表达式(速学篇)

目录

1.正则表达式是什么?

2.正则表达式中的特殊字符含义

3.常用函数及其用法

4.特殊字符用法

5.正则表达式的高级用法


1.正则表达式是什么?

    正则表达式是用于匹配字符串中的模式的表达式。它是一种强大的工具,可以用于搜索、替换和验证文本中的字符串。

2.正则表达式中的特殊字符含义

^匹配字符串的开头
$匹配字符串的结尾
.匹配任意字符
[]匹配字符集合
[^]匹配不在字符集合中的字符
*匹配前面的字符零次或多次
+匹配前面的字符一次或多次
?匹配前面的字符零次或一次
 {n}匹配前面的字符恰好n次
{n,}匹配前面的字符至少n次
{n,m}匹配前面的字符至少n次,但不超过m次
\转义字符,用于匹配特殊字符

3.常用函数及其用法

(1) re.match函数:从字符串的开头匹配正则表达式,如果匹配成功返回一个匹配对象,否则返回None。

示例代码:

import re

str1 = "Hello, world!"
pattern = "^Hello"
result = re.match(pattern, str1)

if result:
    print("Matched!")
else:
    print("Not matched!")

输出结果为:Matched!

(2) re.search函数:在整个字符串中搜索正则表达式,如果匹配成功返回一个匹配对象,否则返回None。

示例代码:

import re

str1 = "Hello, world!"
pattern = "world$"
result = re.search(pattern, str1)

if result:
    print("Matched!")
else:
    print("Not matched!")

输出结果为:Matched!

(3) re.findall函数:搜索整个字符串,返回所有匹配的字符串列表。

示例代码:

import re

str1 = "Hello, world!"
pattern = "\w+"
result = re.findall(pattern, str1)

print(result)

输出结果为:['Hello', 'world']

(4) re.sub函数:替换字符串中的匹配项。

示例代码:

import re

str1 = "Hello, world!"
pattern = "\s"
result = re.sub(pattern, "-", str1)

print(result)

输出结果为:Hello,-world!

4.特殊字符用法

         ^:匹配字符串的开头

示例代码:

import re

str1 = "Hello, world!"
pattern = "^Hello"
result = re.match(pattern, str1)

if result:
    print("Matched!")
else:
    print("Not matched!")

输出结果为:Matched!

         $:匹配字符串的结尾

示例代码:

import re

str1 = "Hello, world!"
pattern = "world$"
result = re.search(pattern, str1)

if result:
    print("Matched!")
else:
    print("Not matched!")

输出结果为:Matched!

          .:匹配任意字符

示例代码:

import re

str1 = "apple, orange, banana"
pattern = "a..le"
result = re.findall(pattern, str1)

print(result)

输出结果为:['apple']

        []:匹配字符集合

示例代码:

import re

str1 = "apple, orange, banana"
pattern = "[ao]"
result = re.findall(pattern, str1)

print(result)

输出结果为:['a', 'o', 'a', 'a']

        [^]:匹配不在字符集合中的字符

示例代码:

import re

str1 = "apple, orange, banana"
pattern = "[^ao]"
result = re.findall(pattern, str1)

print(result)

输出结果为:['p', 'l', 'e', ',', ' ', 'r', 'n', 'g', ',', ' ', 'b', 'n']

        *:匹配前面的字符零次或多次

示例代码:

import re

str1 = "apple, orange, banana"
pattern = "ap.*e"
result = re.findall(pattern, str1)

print(result)

输出结果为:['apple']

        +:匹配前面的字符一次或多次

示例代码:

import re

str1 = "apple, orange, banana"
pattern = "a.+e"
result = re.findall(pattern, str1)

print(result)

输出结果为:['apple']

        ?:匹配前面的字符零次或一次

示例代码:

import re

str1 = "apple, orange, banana"
pattern = "ap.?e"
result = re.findall(pattern, str1)

print(result)

输出结果为:['apple']

        {n}:匹配前面的字符恰好n次

示例代码:

import re

str1 = "apple, orange, banana"
pattern = "a.{2}e"
result = re.findall(pattern, str1)

print(result)

输出结果为:['apple']

        {n,}:匹配前面的字符至少n次

示例代码:

import re

str1 = "apple, orange, banana"
pattern = "a.{2,}e"
result = re.findall(pattern, str1)

print(result)

输出结果为:['apple']

        {n,m}:匹配前面的字符至少n次,但不超过m次

示例代码:

import re

str1 = "apple, orange, banana"
pattern = "a.{1,2}e"
result = re.findall(pattern, str1)

print(result)

输出结果为:['apple']

        \:转义字符,用于匹配特殊字符

示例代码:

import re

str1 = "apple, orange, banana"
pattern = "\."
result = re.findall(pattern, str1)

print(result)

输出结果为:['.', '.']

5.正则表达式的高级用法

(1) 分组和引用

可以使用圆括号来分组,并使用\1、\2等来引用分组。

示例代码:

import re

str1 = "apple apple apple orange orange"
pattern = r"(\w+) \1 \1 (\w+) \2"
result = re.search(pattern, str1)

if result:
    print("Matched!")
else:
    print("Not matched!")

输出结果为:Matched!

(2) 零宽度断言

零宽度断言用于匹配一个位置,而不是匹配一个字符。常用的零宽度断言有:正向先行断言(?=)、正向后行断言(?<=)、负向先行断言(?!)、负向后行断言(?<!)。

示例代码:

import re

str1 = "apple123orange"
pattern = r"\d+(?=orange)"
result = re.search(pattern, str1)

if result:
    print("Matched!")
else:
    print("Not matched!")

输出结果为:Matched!

(3) 非贪婪匹配

默认情况下,正则表达式会尽可能匹配最长的字符串。可以使用?来实现非贪婪匹配。

示例代码:

import re

str1 = "<h1>title1</h1><h2>title2</h2>"
pattern = r"<.+?>"
result = re.findall(pattern, str1)

print(result)

输出结果为:['<h1>', '</h1>', '<h2>', '</h2>']

正则表达式默认是贪婪匹配,即会尽可能匹配最长的字符串。例如,对于字符串"123456",正则表达式"\d+"会匹配整个字符串,而不是只匹配"123"。

如果需要使用贪婪匹配,可以在正则表达式中使用"?"来实现。例如,将正则表达式"\d+?"应用于字符串"123456",则只会匹配"1"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初见~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值