Python中使用正则表达式

发布于:2024-08-08 ⋅ 阅读:(106) ⋅ 点赞:(0)

摘要:

正则表达式,又称为规则表达式,它不是某种编程语言所特有的,而是计算机科学的一个概念,通常被用来检索和替换某些规则的文本。

一.正则表达式的语法

①行定位符

行定位符就是用来描述字符串的边界。"^"表示行的开始,"$"表示行的结束。

^tm    # tm equal Tomorrow Moon可以匹配
tm$    # Tomorrow Moon equal tm可以匹配
tm     # 两者都可以匹配

②元字符

元字符 说明
. 匹配除换行符以外的任意字符
\w 匹配字母、数字、下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或者结束
^ 匹配字符串的开始
$ 匹配字符串的结束

③限制符

限定符 说明 举例
? 匹配前面的字符零次或一次 colou?r,该表达式可以匹配color和colour
+ 匹配前面的字符一次或多次 go+gle,该表达式可以匹配的范围从gogle到goo...gle
* 匹配前面的字符零次或多次 go*gle,该表达式可以匹配的范围从ggle到goo...gle
{n} 匹配前面的字符n次 go{2}gle,该表达式只可匹配google
{n,} 匹配前面的字符最少n次 go{2,}gle,该表达式可以匹配的范围从google到goo...gle
{n,m} 匹配前面的字符最少n次,最多m次 employee{0,2},该表达式可以匹配employ、employe和emploee三种情况

④字符类

字符类是一种用于匹配指定字符集中的任意单个字符的模式。字符类被定义在方括号 [] 之内。

  1. 基本字符类

    • [abc]:匹配 "a" 或 "b" 或 "c" 中的任何一个字符。

    • [0-9]:匹配任何数字(等同于 \d)。

  2. 排除字符类

    • [^abc][!abc]:匹配除 "a"、"b" 和 "c" 之外的任何字符。

    • [^0-9]:匹配任何非数字字符(等同于 \D)。

  3. 预定义字符类

    • \d:等同于 [0-9],匹配任何数字。

    • \D:等同于 [^0-9],匹配任何非数字。

    • \w:匹配任何字母数字字符和下划线(等同于 [a-zA-Z0-9_])。

    • \W:匹配任何非字母数字字符和非下划线(等同于 [^a-zA-Z0-9_])。

    • \s:匹配任何空白字符(包括空格、制表符、换页符等)。

    • \S:匹配任何非空白字符。

  4. 特殊字符

    • 如果你想要匹配方括号 [] 本身,需要将它们放在字符类的开头或结尾,或者用反斜杠 \ 转义。

    • 其他特殊字符(如点 .、加号 +、问号 ?、星号 * 等)在字符类中也失去了特殊意义,可以直接使用。

示例

import re
​
text = "The quick brown fox jumps over the lazy dog 123."
pattern = "[a-z]"  # 匹配任何小写字母
​
matches = re.findall(pattern, text)
print(matches)  # 输出所有匹配的小写字母

二.使用re模板实现正则表达式操作

python提供了re模板,用于实现正则表达式的操作。

在使用re模板时,需要先应用import语句将其导入,import re

①匹配字符串

匹配字符串可以使用re模块提供的match()、search()和findall()等方法

(1)match()方法

match()方法用于从字符串的开始处进行匹配,若成功,则返回Match对象,否则返回None。

语法形式:

re.match(pattern,string,[flags])
​

pattern:表示模式字符串,由要匹配的正则表达式转换而来。

string:表示要匹配的字符串。

flags:可选参数,表示标志位,用于控制匹配方式。

标志 说明
A或ASCII 对于\w、\W、\b、\B、\D、\s和\S只进行ASCII匹配
I或IGNORECASE 执行不区分字母大小写的匹配
M或MULTITINE 将^和$用于包括整个字符串的开始和结尾的每一行
S或DOTALL 使用"."字符匹配所有字符,包括换行符号
X或VERBOSE 忽略模式字符串中未转义的空格和注释

示例:

import re
​
pattern = r'mr_\w+'
string = 'MR_SHOP mr_shop'
match = re.match(pattern, string, re.I)
print(match)
string = '项目名称MR_SHOP mr_shop'
match = re.match(pattern, string, re.I)
print(match)

(2)search()方法

search()方法用于在整个字符串中搜索第一个要匹配的值,如果在起始位置匹配成功,则返回Match对象,否则返回None。

语法形式:

re.search(pattern,string,[flags])

示例:

import re
​
pattern = r'mr_\w+'
string = 'MR_SHOP mr_shop'
match = re.search(pattern, string, re.I)
print(match)
string = '项目名称MR_SHOP mr_shop'
match = re.search(pattern, string, re.I)
print(match)

注意:从上述例子可以看出,search()方法不仅仅是在字符串的起始位置处进行搜索,还可以在其他位置处搜索有符合的匹配。

(3)findall()方法

findall()方法用于在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回。如果匹配成功,则返回包含匹配结构的列表,否则返回空列表。

语法形式:

re.findall(pattern,string,[flags])

示例:

import re
​
pattern = r'mr_\w+'
string = 'MR_SHOP mr_shop'
match = re.findall(pattern, string, re.I)
print(match)
string = '项目名称MR_SHOP mr_shop'
match = re.findall(pattern, string)
print(match)
​

②替换字符串

sub()方法用于实现字符串的替换。

语法形式:

re.sub(pattern,repl,string,count,flags)

示例:

import re
​
pattern = r'1[34578]\d{9}'
string = '中奖号码为:84978987 联系电话为:13611111111'
result = re.sub(pattern, '1xxxxxxxxxx', string)
print(result)

③使用正则表达式分割字符串

split()方法用于实现根据正则表达式分割字符串,并以列表的形式放回。

语法形式:

re.split(pattern,string,[maxsplit],[flags])

示例:

import re
​
pattern = r'[?|&]'
url = 'http://www.baidu.com?username="mr&pwd=mrsoft'
result = re.split(pattern, url)
print(result)


网站公告

今日签到

点亮在社区的每一天
去签到