python-- re 模块

1. 什么是re模块

在Python中,re (regular expression)模块是用来处理正则表达式的库。正则表达式是一种处理字符串的强大工具,它可以用来匹配、搜索、替换字符串中与模式匹配的文本。

1.1 re模块的使用

在Python中,使用re模块的第一步是导入它。下面是一个示例:

import re

一旦导入了re模块,就可以使用re模块中的函数了。

2. re模块中的常用函数

2.1 re.match函数

re.match函数用于从字符串的起始位置匹配一个模式,如果匹配成功,就返回一个匹配对象;如果匹配失败,就返回None。

下面是一个示例:

import re

text = "Hello, World!"

result = re.match(r'H.*\!', text)

if result:

print("匹配成功!")

else:

print("匹配失败!")

输出结果:

匹配成功!

在这个例子中,我们使用re.match函数从text字符串的起始位置匹配一个以H开头,以!结尾的字符串。由于text字符串的起始位置是一个H,所以匹配成功。

2.2 re.search函数

re.search函数用于在字符串中搜索符合正则表达式的第一个子串,并返回匹配对象。如果没有找到任何匹配的子串,就返回None。

下面是一个示例:

import re

text = "Hello, World!"

result = re.search(r'W.*\!', text)

if result:

print("匹配成功!")

else:

print("匹配失败!")

输出结果:

匹配成功!

在这个例子中,我们使用re.search函数在text字符串中搜索第一个以W开头,以!结尾的字符串。由于text字符串中存在一个这样的子串,所以匹配成功。

2.3 re.findall函数

re.findall函数用于在字符串中搜索符合正则表达式的所有子串,并将它们以列表的形式返回。

下面是一个示例:

import re

text = "Hello, World!"

result = re.findall(r'e', text)

print(result)

输出结果:

['e', 'e']

在这个例子中,我们使用re.findall函数在text字符串中搜索所有的'e'字符,并将它们以列表的形式返回。

2.4 re.sub函数

re.sub函数用于在字符串中替换符合正则表达式的子串,可以指定替换的次数。函数的语法如下:

re.sub(pattern, repl, string, count=0)

其中,pattern是要匹配的正则表达式,repl是替换的字符串(可以使用\g<组名>的形式指定替换的值),string是要处理的字符串,count是指定替换的次数。

下面是一个示例:

import re

text = "Hello, World!"

result = re.sub(r'World', 'Python', text)

print(result)

输出结果:

Hello, Python!

在这个例子中,我们使用re.sub函数将text字符串中的"World"替换为"Python"。

2.5 re.compile函数

re.compile函数用于将正则表达式编译成一个对象,这个对象可以直接传递给其他函数使用,可以提高程序的效率。函数的语法如下:

re.compile(pattern, flags=0)

其中,pattern是正则表达式,flags是可选的标志,用于控制正则表达式的匹配方式。

下面是一个示例:

import re

pattern = re.compile(r'[A-Z]\w+')

text = "Hello, World!"

result = pattern.search(text)

if result:

print("匹配成功!")

else:

print("匹配失败!")

输出结果:

匹配成功!

在这个例子中,我们使用re.compile函数将正则表达式编译成一个对象,然后使用这个对象调用search函数搜索text字符串中符合正则表达式的子串。

3. 正则表达式语法

正则表达式是一种强大的字符串处理工具,它可以用来匹配、搜索、替换字符串中的文本。正则表达式由若干个元字符和普通字符组成,元字符表示特殊的意义,普通字符表示直接的文本。

3.1 普通字符

普通字符是正则表达式中最基本的部分。它们表示对应的文本。例如,字符a表示单个字符a。

3.2 .元字符

.元字符匹配任意一个字符。

下面是一个示例:

import re

result = re.findall(r'.ello', 'Hello, World!')

print(result)

输出结果:

['Hello']

在这个例子中,正则表达式.rms表示以r开头,后面跟任意一个字符,然后跟"ms"的字符串。运行结果中只有"Hello"符合这个条件。

3.3 []元字符

[]元字符用于指定一个字符集合,表示匹配其中的任意一个字符。例如,[abc]表示匹配a、b、c中的任意一个字符。

下面是一个示例:

import re

result = re.findall(r'[aeiou]', 'Hello, World!')

print(result)

输出结果:

['e', 'o', 'o']

在这个例子中,正则表达式[aeiou]表示匹配任意一个元音字母。运行结果中有3个元音字母满足这个条件。

3.4 [^]元字符

[^]元字符用于指定一个字符集合的补集,表示匹配不在其中的任意一个字符。例如,[^abc]表示匹配除了a、b、c以外的任意一个字符。

下面是一个示例:

import re

result = re.findall(r'[^aeiou]', 'Hello, World!')

print(result)

输出结果:

['H', 'l', ',', ' ', 'W', 'r', 'l', 'd', '!']

在这个例子中,正则表达式[^aeiou]表示匹配任意一个非元音字母。运行结果中有9个非元音字母满足这个条件。

3.5 \|元字符

\|元字符用于表示或,例如,a\|b表示匹配a或b。

下面是一个示例:

import re

result = re.findall(r'hello\|world', 'Hello, world!')

print(result)

输出结果:

['world']

在这个例子中,正则表达式hello\|world表示匹配hello或world。运行结果中只有"world"符合这个条件。

3.6 ^和$元字符

^和$元字符分别表示字符串的起始位置和结束位置。例如,^a表示匹配以a开头的字符串,b$表示匹配以b结尾的字符串。

下面是一个示例:

import re

result = re.findall(r'^H.*!$', 'Hello, world!')

print(result)

输出结果:

['Hello, world!']

在这个例子中,正则表达式^H.*!$表示匹配以H开头,以!结尾的字符串。运行结果中只有"Hello, world!"符合这个条件。

3.7 *、+和?元字符

*、+和?元字符用于指定前面一个字符的匹配数量。

*表示匹配前面的字符0个或多个。

+表示匹配前面的字符1个或多个。

?表示匹配前面的字符0个或1个。

下面是一个示例:

import re

result1 = re.findall(r'w*', 'www')

result2 = re.findall(r'w+', 'www')

result3 = re.findall(r'w?', 'www')

print(result1)

print(result2)

print(result3)

输出结果:

['', '', '', '']

['www']

['', 'w', 'w', '']

在这个例子中,我们分别使用*、+、?元字符匹配字符串"www"。可以看到,*元字符匹配0个或多个w字符,因此输出结果是4个空字符串;+元字符匹配1个或多个w字符,所以输出结果是"www";?元字符匹配0个或1个w字符,因此输出结果是3个字符串。

3.8 {n}、{n,}和{n,m}元字符

{n}、{n,}和{n,m}元字符用于指定前面一个字符的匹配数量。

{n}表示匹配前面的字符恰好n次。

{n,}表示匹配前面的字符至少n次。

{n,m}表示匹配前面的字符至少n次,至多m次。

下面是一个示例:

import re

result1 = re.findall(r'a{3}', 'aaab')

result2 = re.findall(r'a{2,}', 'aaab')

result3 = re.findall(r'a{1,3}', 'aaab')

print(result1)

print(result2)

print(result3)

输出结果:

['aaa']

['aaa']

['aaa']

在这个例子中,我们分别使用{3}、{2,}、{1,3}元字符匹配字符串"aaab"。可以看到,{3}元字符匹配前面的字符恰好3次,所以输出结果只有一个"aaa";{2,}元字符匹配前面的字符至少2次,输出结果也是"aaa";{1,3}元字符匹配前面的字符至少1次,至多3次,输出结果也是"aaa"。

3.9 ()元字符

()元字符用于指定一个子表达式,被括号括起来的部分表示一个整体。这个整体可以作为一个单元参与匹配,也可以在后续的替换中使用\g<组名>的形式指定替换的值。

下面是一个示例:

import re

result = re.findall(r'(Hello)[, ](World)', 'Hello, World!')

print(result)

输出结果:

[('Hello', 'World')]

在这个例子中,正则表达式(Hello)[, ](World)表示匹配"Hello, World"这个字符串,并将"Hello"和"World"分别作为两个组返回。

4. re模块中的标志

re模块中的标志用于控制正则表达式的匹配方式。

4.1 re.I标志

re.I标志用于忽略大小写。例如,正则表达式hello可以匹配"hello"和"Hello"。

下面是一个示例:

import re

result = re.findall(r'hello', 'Hello, World!', re.I)

print(result)

输出结果:

['Hello']

在这个例子中,我们使用re.I标志匹配"Hello, World!"中的"hello"字符串。

4.2 re.M标志

re.M标志用于匹配多行字符串。

下面是一个示例:

import re

text = 'hello\nworld'

result = re.findall(r'^h.*', text, re.M)

print(result)

输出结果:

['hello', 'world']

在这个例子中,我们使用re.M标志匹配换行符\n分隔的多行字符串"text"。

4.3 re.S标志

re.S标志用于匹配任意字符,包括换行符。

下面是一个示例:

import re

text = 'hello\nworld'

result = re.findall(r'.*', text, re.S)

print(result)

输出结果:

['hello', '', 'world', '']

在这个例子中,我们使用re.S标志匹配多行字符串"text"中的任意字符。

4.4 re.X标志

re.X标志用于忽略正则表达式中的空白符和注释。

下面是一个示例:

import re

result = re.findall(r'''

\d+ # 匹配数字

\s* # 匹配0个或多个空白符

[+] # 匹配加号

\s* # 匹配0个或多个空白符

\d+ # 匹配数字

''', '1 + 2')

print(result)

输出结果:

['1 + 2']

在这个例子中,我们使用re.X标志

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签