Python中使用正则表达式

摘要:

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

一.正则表达式的语法

①行定位符

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

^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)

  • 11
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值