python 正则表达式 re模块

本文详细介绍了Python中的正则表达式re模块,包括元字符、匹配单个字符与数字、各种标志如ASCII、DOTALL等的含义,以及贪婪与非贪婪模式。此外,还讨论了re模块的方法,如捕获组和非捕获组,以及在匹配IP地址时的注意事项。
摘要由CSDN通过智能技术生成

正则表达式:

  • 本质:就是用于处理字符串的一种方式
    语法:

元字符:. ^ $ * + ? { } [ ] \ | ( )

^     行首匹配,和在[]里的^不是一个意思
$     行尾匹配
*     匹配0次或者无数次
+    至少匹配一次或者无数多次
?   匹配0次或者1次
{}    {n}     匹配确定的n个x(n是一个非负整数)
	  {n,}    匹配至少n个x
	  {n,m}   匹配至少n个最多m个x。注意:n <= m 
[ ]     字符类  匹配所包含的任意一个字符
 		1、连字符 - 如果出现在字符串中表示字符范围描述;如果出现在首位则仅作为普通字符
		 2、特殊字符仅有反斜线 \ 保持特殊含义,用于转义字符,其他字符如 * + ? 等均作为普通字符串匹配
 		3、脱字符 ^ 如果出现在首位则表示不包含其中的任意字符;如果 ^ 出现在字符串中间就仅作为普通字符匹配
\       转义字符
|       或
( )     组

匹配单个字符与数字

.                匹配除换行符以外的任意字符
[0123456789]     []是字符集合,表示匹配方括号中所包含的任意一个字符
[good]           匹配good中任意一个字符
[a-z]            匹配任意小写字母
[A-Z]            匹配任意大写字母
[0-9]            匹配任意数字,类似[0123456789]
[0-9a-zA-Z]      匹配任意的数字和字母
[0-9a-zA-Z_]     匹配任意的数字、字母和下划线
[^good]          匹配除了good这几个字母以外的所有字符,中括号里的^称为脱字符,表示不匹配集合中的字符
[^0-9]           匹配所有的非数字字符
\d               匹配数字,效果同[0-9]
\D               匹配非数字字符,效果同[^0-9]
\w               匹配数字,字母和下划线,效果同[0-9a-zA-Z_]
\W               匹配非数字,字母和下划线,效果同[^0-9a-zA-Z_]
\s               匹配任意的空白符(空格,回车,换行,制表,换页),效果同[ \r\n\t\f]
\S               匹配任意的非空白符,效果同[^ \f\n\r\t]

flag

ASCII, A	-------------使得转义符号如 \w,\b,\s 和 \d 只能匹配 ASCII 字符
DOTALL, S	-------------使得 . 匹配任何符号,包括换行符
IGNORECASE, I	---------匹配的时候不区分大小写
LOCALE, L	-------------支持当前的语言(区域)设置
MULTILINE, M	---------多行匹配,影响 ^ 和 $
VERBOSE, X (for 'extended')	---------启用详细的正则表达式

下面我们来详细讲解一下它们的含义:

A
ASCII
使得 \w,\W,\b,\B,\s 和 \S 只匹配 ASCII 字符,而不匹配完整的 Unicode 字符。这个标志仅对 Unicode 模式有意义,并忽略字节模式。

S
DOTALL
使得 . 可以匹配任何字符,包括换行符。如果不使用这个标志,. 将匹配除了换行符的所有字符。

I
IGNORECASE
字符类和文本字符串在匹配的时候不区分大小写。举个例子,正则表达式 [A-Z] 也将会匹配对应的小写字母,像 FishC 可以匹配 FishC,fishc 或 FISHC 等。如果你不设置 LOCALE,则不会考虑语言(区域)设置这方面的大小写问题。

L
LOCALE
使得 \w,\W,\b 和 \B 依赖当前的语言(区域)环境,而不是 Unicode 数据库。

区域设置是 C 语言的一个功能,主要作用是消除不同语言之间的差异。例如你正在处理的是法文文本,你想使用 \w+ 来匹配单词,但是 \w 只是匹配 [A-Za-z] 中的单词,并不会匹配 ‘é’ 或 ‘ç’。如果你的系统正确的设置了法语区域环境,那么 C 语言的函数就会告诉程序 ‘é’ 或 ‘ç’ 也应该被认为是一个字符。当编译正则表达式的时候设置了 LOCALE 的标志,\w+ 就可以识别法文了,但速度多少会受到影响。

M
MULTILINE
(^ 和 $ 我们还没有提到,别着急,后边我们有细讲…)

通常 ^ 只匹配字符串的开头,而 $ 则匹配字符串的结尾。当这个标志被设置的时候,^ 不仅匹配字符串的开头,还匹配每一行的行首;& 不仅匹配字符串的结尾,还匹配每一行的行尾。

X
VERBOSE
这个标志使你的正则表达式可以写得更好看和更有条理,因为使用了这个标志,空格会被忽略(除了出现在字符类中和使用反斜杠转义的空格);这个标志同时允许你在正则表达式字符串中使用注释,# 符号后边的内容是注释,不会递交给匹配引擎(除了出现在字符类中和使用反斜杠转义的 #)。

下边是使用 re.VERBOSE 的例子,大家看下正则表达式的可读性是不是提高了不少:

charref = re.compile(r"""
&[#]                # 开始数字引用
(
     0[0-7]+         # 八进制格式
   | [0-9]+          # 十进制格式
   | x[0-9a-fA-F]+   # 十六进制格式
)
;                   # 结尾分号
""", re.VERBOSE)

如果没有设置 VERBOSE 标志,那么同样的正则表达式会写成:

charref = re.compile("&#(0[0-7]+|[0-9]+|x[0-9a-fA-F]+);") -----------可读性太差

贪婪与非贪婪

?在条件后面加冒号就是非贪婪
在python中的re模块中,所有方法都是贪婪模式匹配

re模块

方法

p = re.compile(re) ------将正则表达式保存起来,复用方便。。     p.findall(string)
re.match(re,string)	判断一个正则表达式是否从开始处匹配一个字符串
re.search(re,string)	遍历字符串,找到正则表达式匹配的第一个位置
re.findall(re,string)	遍历字符串,找到正则表达式匹配的所有位置,并以列表的形式返回
re.finditer(re,string)	遍历字符串,找到正则表达式匹配的所有位置,并以迭代器的形式返回
re.spilt(re,string)       遍历字符串,找到正则表达式匹配的所有位置,以正则表达式分割字符串
re.sub(re,[string | func()],string)   遍历字符串,找到正则表达式匹配的所有位置,以正则表达式替换字符串,返回新的字符串
re.subn(re,[string | func()],string)  遍历字符串,找到正则表达式匹配的所有位置,以正则表达式替换字符串,返回一个元祖,(新的字符串,替换的个数)
m = re.sub("dog|cat", "mouse", "dog and cat")
print(m)  # mouse and mouse

m = re.subn("dog|cat", "mouse", "dog and cat")
print(m)  # ('mouse and mouse', 2)
match()和search()  如果没有找到任何匹配的话,match() 和 search() 会返回 None;如果匹配成功,则会返回一个匹配对象(match object)
匹配成功返回的对象的方法
group()	返回匹配的字符串   -----所有的re方法都有
start()	返回匹配的开始位置
end()	返回匹配的结束位置
span()	返回一个元组表示匹配位置(开始,结束)
import re

a = re.search(r"l", " lk hiug hg hvjv v bkbnj"
好的,您想了解Python正则表达式re模块。re模块Python的标准库之一,用于处理正则表达式正则表达式是一种用于匹配和搜索文本的模式,它可以用来检查字符串是否符合特定的格式,或者从字符串中提取想要的信息。 re模块提供了一系列函数和方法来操作正则表达式,包括: - re.compile(pattern, flags):编译正则表达式,返回一个正则表达式对象。 - re.search(pattern, string, flags):在字符串中搜索匹配正则表达式的第一个位置,返回一个匹配对象。 - re.match(pattern, string, flags):从字符串开头开始匹配正则表达式,返回一个匹配对象。 - re.findall(pattern, string, flags):返回字符串中所有匹配正则表达式的子串列表。 - re.sub(pattern, repl, string, count=0, flags=0):用指定的替换字符串替换字符串中所有匹配正则表达式的子串,返回替换后的字符串。 其中,pattern参数是正则表达式,string参数是要匹配的字符串,flags参数是可选的标志,用来控制正则表达式的行为。 例如,下面的代码展示了如何使用re模块来匹配一个简单的正则表达式: ```python import re text = 'Hello, World!' pattern = r'Hello' match = re.search(pattern, text) if match: print('Match found:', match.group()) else: print('No match') ``` 输出结果为: ``` Match found: Hello ``` 以上就是Python正则表达式re模块的基本介绍,希望能帮到您。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值