4.7正则表达式

1.字符匹配

|------------|----------------------------------------------------------------------------------|
| 一般字符 | 匹配自身 |
| . | 匹配任意字符(换行符\n除外),一个点占一位 |
| \ | 转义字符,使其后一个字符改变原来的意思(\.就是.) |
| ...... | 字符集,对应的位置可以是字符集中的任意字符.字符集中的字符可以逐个列出,也可以给出范围如abca-c \^abc 表示取反,即非abc |

2.预定字符集匹配

|-----|--------------------------------|-------|-----|
| \d | 数字:0-9 | a\dc | a1c |
| \D | 非数字\\D | a\Dc | abc |
| \s | 匹配任何空白字符:空格\\t\\r\\n\\f\\v | a\sc | a c |
| \S | 非空白字符:\\S | a\Sc | abc |
| \w | 匹配包括下划线在内的任何字符:A-Za-z0-9_ | a\wc | abc |
| \W | 匹配非字母字符,即匹配特殊字符 | a\Wc | a c |

3.字符串数据词匹配

|----|---------------------------------------------|
| * | 匹配前一个字符0次或者多次 |
| + | 匹配前一个字符1次或者无限次 |
| ? | 匹配一个字符0次或1次 |
| {} | {m匹配前一个字符m次,{m,n匹配前一个字符m至n次,若省略n次,则匹配m至无限次} |

4.字符串边界匹配

|----|------------------------|
| ^ | 匹配字符串开头,在多行模式中匹配每一行的开头 |
| $ | 匹配字符串末尾,在多行模式中匹配每一行的末尾 |

5.在python中使用

5.1match方法的使用

python 复制代码
# re是python内置的模块
import re

# 使用 re.compile()函数将正则表达式模式 r'\d+' 编译成一个
pattern = re.compile(r'\d+')

# 以下对 pattern.match() 方法参数的说明
# 参数2 开始位置 指定从字符串的哪个索引位置开始进行匹配
# 参数3 结束位置 指定匹配操作的结束索引位置
# 结束位置是不包含的,即匹配操作会在该索引之前结束
# 匹配一次然后结束,即只要找到第一个匹配就停止匹配
# 匹配一次就结束,即找到第一个匹配就停止匹配
m1 = pattern.match('one12345678',3,7)

# 调用m1对象的group方法返回匹配到的字符串
print(m1.group())

5.2 search方法的使用

python 复制代码
import re

pattern = re.compile(r'\d+')

m1 = pattern.search('one123456789two')
print(m1.group())

# 也是一次匹配

5.3findall方法的使用

python 复制代码
import re

pattern = re.compile(r'\d+')

result = pattern.findall('hello 123 world 456')

print(result)

# pattern.findall() 是 Pattern 对象的一个方法,用于在指定的字符串中查找所有匹配正则表达式模式的子字符串。
# 'hello 123 world 456' 是要搜索的字符串。
# findall() 方法返回一个列表,列表中的每个元素都是一个匹配到的子字符串。如果没有找到匹配项,返回一个空列表。

6.split函数的使用

python 复制代码
import re

# 定义一个字符串

str1 = 'a,b,c,d,e'

# 使用字符串的split方法分割

print(str.split(','))


str2 = 'a,b;;c     d'

# 编译一个正则表达式

patterm = re.compile(r'[\s,;]+')

# 使用编译好的正则表达式模式对字符串 str2进行分割
print(pattern.split(str2))

6.sub方法的使用

python 复制代码
import re

string = '<h1 class="test1">Hello World</h1>'

# 编译一个正则表达式 匹配单个数字

pattern = re.compile(r'\d')

# 使用sub方法将字符串匹配到的数字 换成2
print(pattern.sub('2',string))

# 使用第三个参数  是更换几次
print(pattern.sub('2',string,1))

# 编译一个正则表达式模式,用于匹配特定格式的 HTML 标签,并将 class 属性的值命名为 classname
pattern = re.compile(r'(.\d)\sclass=(?P<classname>.*>?)".*?</(\\)')
# 使用search方法
print(pattern.search(string).gorup())

# 定义一个函数 fun,用于处理替换操作
def fun(m):
    """
    该函数用于处理正则表达式替换操作。
    :param m: 匹配对象,包含匹配到的信息
    :return: 替换后的字符串
    """
    # 从匹配对象中获取 classname 组的内容,并拼接字符串
    return 'after sub' +m.group('classname')


# 使用 sub 方法将字符串 string 中匹配到的内容替换为 fun 函数处理后的结果,并打印结果
print(pattern.sub(fun,string))
相关推荐
吴声子夜歌3 天前
正则指引——Ruby
开发语言·正则表达式·ruby
吴声子夜歌3 天前
正则指引——Golang
开发语言·golang·正则表达式
吴声子夜歌4 天前
正则指引——PHP
开发语言·正则表达式·php
吴声子夜歌5 天前
正则指引——断言
正则表达式
吴声子夜歌6 天前
正则指引——匹配原理
java·正则表达式
吴声子夜歌7 天前
正则表达式——环视
开发语言·正则表达式
吴声子夜歌7 天前
正则表达式——边界
正则表达式
营养充电站8 天前
C++23 新特性在 CLion 中的实战体验
macos·docker·jupyter·正则表达式
吴声子夜歌8 天前
正则表达式——字符组
正则表达式