python—re模块与正则简介

一、前言

正则表达式是对字符串提取的一套规则,我们把这个规则用正则里面的特定语法表达出来,去匹配满足这个规则的字符串。正则表达式具有通用型,不仅python里面可以用,其他的语言也一样适用。

python中re模块提供了正则表达式的功能,常用的有四个方法(match、search、findall)都可以用于匹配字符串。

二、常用正则匹配规则

单字符匹配

字符描述
.匹配除换行符 \n 之外的任何单字符
[ ]匹配[ ] 中列举的字符
\d匹配一个数字字符。等价于 [0-9]。
\D匹配非数字
\s匹配空白字符,即tab键
\S匹配非空白字符
\w匹配单词字符,a-z,0-9,以及下划线_
\W匹配非单次字符

表示数量:

字符功能
+匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+
*匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*
?匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?
{n}n 是一个非负整数,匹配一个字符出现 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
{n.}匹配前一个字符至少出现n次
{m,n}匹配前一个字符出现m到n次

匹配边界:

字符功能
^匹配字符串开头
$匹配字符串结尾
\b匹配一个单词的边界
\B匹配非单词边界

匹配分组:

字符描述
|替换,“或"操作 字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food”。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。
(ab)将括号中的字符作为一个分组
\num引用分子num匹配到的字符串
(?P)给分组起别名
(?P=name)应用别名为name的分子匹配到的字符串

三、re模块常用的匹配方法

1、re.match()

re.match()必须从字符串开头匹配! match方法尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

re.match()方法返回的是一个匹配的对象,而不是匹配的内容。如果需要返回内容则需要调用group()。通过调用span()可以获得匹配结果的位置。而如果从起始位置开始没有匹配成功,即便其他部分包含需要匹配的内容,re.match()也会返回None。

主要参数如下:

re.match(pattern, string)
# pattern     匹配的正则表达式
# string      要匹配的字符串

示例:

#匹配3个任意字符,并通过列表返回
import re
text = "Python is the best language in the world. "
res = re.match('Py...',text) #匹配到的内容为为Pytho,返回一个res对象
res1= re.match(r'\d...',text) #match必须从头开始匹配,text开头不为数字,返回none
2、re.search()

和match差不多用法,从字符串中进行搜索。都是返回一个匹配对象,不直接返回匹配内容。

3、re.findall()

从字面意思上就可以看到,findall是寻找所有能匹配到的字符,并以列表的方式返回。

示例:

#匹配一个或多个数字
import re
text = "Please contact Teacher Cheng (18390904289) or Teacher Li (17256892366)."

res= re.match(r'\d+',text) #匹配到两个手机号码,通过列表返回。
4、re.sub()

查找字符串中所有相匹配的数据进行替换.

相关参数:

re.sub(替换的数据,替换成什么,要替换的数据所在的地方)

示例:

import re
text = "Python is the best language in the world. "
res = re.sub("Python","PHP",text)
print(res)  #输出结果为:PHP is the best language in the world.
5、re.split()

以匹配到的对字符串为边界对内容进行分割。返回一个列表。

示例:

import re
s = "itcase,java:php-php3;html"
print(re.split(r",",s))           #以,号进行分割
#返回内容:["itcase","java:php-php3;html"]

四、常见匹配需求

匹配邮箱账号:

[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?

匹配手机号码:

^1(3\d|4[4-9]|5[0-35-9]|6[67]|7[013-8]|8[0-9]|9[0-9])\d{8}$

匹配IP地址:

^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$

匹配网址URL:

(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?

匹配18位身份证号码:

^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$

匹配汉字:

/^((?![\u3000-\u303F])[\u2E80-\uFE4F]|\·)*(?![\u3000-\u303F])[\u2E80-\uFE4F](\·)*$/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 的 re 模块提供了正则表达式相关的操作,可以用来匹配、查找和替换字符串。 下面是一些常用正则表达式操作: 1. re.search(pattern, string, flags=0):在字符串中搜索匹配正则表达式的第一个位置,并返回一个匹配对象。如果没有匹配则返回 None。 2. re.match(pattern, string, flags=0):从字符串的开始位置匹配正则表达式,并返回一个匹配对象。如果没有匹配则返回 None。 3. re.findall(pattern, string, flags=0):返回字符串中所有匹配正则表达式的子串,并以列表形式返回。 4. re.sub(pattern, repl, string, count=0, flags=0):使用 repl 替换字符串中所有匹配正则表达式的子串,并返回替换后的字符串。 5. re.compile(pattern, flags=0):将正则表达式编译成一个 Pattern 对象,以便在后面的操作中使用。 下面是一个例子,展示如何使用 re 模块进行正则表达式操作: ```python import re # 匹配字符串中的所有数字 string = "hello 123 world 456" result = re.findall(r'\d+', string) print(result) # ['123', '456'] # 替换字符串中的所有数字为 # result = re.sub(r'\d+', '#', string) print(result) # 'hello # world #' # 匹配字符串中的某个子串 string = "hello world" result = re.search(r'world', string) print(result.group()) # 'world' ``` 在这个例子中,我们使用了 re.findall()、re.sub() 和 re.search() 函数来操作字符串,并使用正则表达式来匹配和替换字符串中的子串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值