[Python进阶] Python中使用正则表达式

8.4 Python中使用正则表达式

在Python中,我们使用re模块来使用正则表达式。以下是一些基本的使用方法:

首先,你需要导入re模块:

import re

8.4.2 re模块简单示例

8.4.2.1 查找字符串

使用re模块的search()方法可以在一个字符串中查找匹配正则表达式的部分。例如,下面的代码将查找字符串中的"abc":

py 复制代码
import re  
  
string = "Hello, abc world!"  
match = re.search("abc", string)  
  
if match:  
    print("Found match: ", match.group())  
else:  
    print("No match found.")

Found match: abc

8.4.2.2 匹配字符串

如果你想检查一个字符串是否完全符合一个正则表达式,你可以使用match()方法。例如,下面的代码将检查字符串是否以"abc"开头:

py 复制代码
import re  
  
string = "abc world!"  
match = re.match("abc", string)  
  
if match:  
    print("Match found: ", match.group())  
else:  
print("No match found.")

Match found: abc

注意,match()方法只检查字符串的开始部分是否符合正则表达式,如果你想检查整个字符串是否符合,你应该使用fullmatch()方法。

8.4.2.3 替换字符串

如果你想在字符串中查找并替换匹配正则表达式的部分,你可以使用sub()方法。例如,下面的代码将在字符串中查找所有的"abc"并替换为"xyz":

py 复制代码
import re  
  
string = "Hello, abc world! abc"  
new_string = re.sub("abc", "xyz", string)  
print(new_string)

Hello, xyz world! xyz

以上就是Python中使用正则表达式查找和匹配字符串的基本方法。

8.4.3 re模块函数详解

8.4.3.1 re.match:从头查找

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
函数语法:

re.match(pattern, string, flags=0)
参数说明:

| 参数 | 描述 |

|---------|--------------------|

| pattern | 匹配的正则表达式 |

| string | 要匹配的字符串 |

| flags | 标志位,用于控制正则表达式的匹配方式 |
标志位:

| 修饰符 | 描述 |

|---|---|

| re.I | 使匹配对大小写不敏感 |

| re.L | 做本地化识别(locale-aware)匹配 |

| re.M | 多行匹配,影响 ^ 和 $ |

| re.S | 使 . 匹配包括换行在内的所有字符 |

| re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |

| re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |

匹配成功re.match方法返回一个匹配的对象,否则返回None。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
匹配结果对象方法

匹配对象方法 描述
group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
span() 返回匹配结果所在的位置
8.4.3.2 re.search:查找全部

re.search 扫描整个字符串并返回第一个成功的匹配。
函数语法:

re.search(pattern, string, flags=0)
参数说明:

| 参数 | 描述 |

|---|---|

| pattern | 匹配的正则表达式 |

| string | 要匹配的字符串。 |

| flags | 标志位,用于控制正则表达式的匹配方式 |

匹配成功re.search方法返回一个匹配的对象,否则返回None。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

8.4.3.3 re.sub:检索并替换

语法:

re.sub(pattern, repl, string, count=0, flags=0)
参数:

| 参数名 | 说明 |

|---|---|

| pattern | 正则中的模式字符串。 |

| repl | 替换的字符串,也可为一个函数。 |

| string | 要被查找替换的原始字符串。 |

| count | 模式匹配后替换的最大次数,默认0表示替换所有的匹配。 |

| flags | 编译时用的匹配模式,数字形式。 |

8.4.3.4 re.findall

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。

注意: match 和 search 是匹配一次 findall 匹配所有。
语法:

re.findall(pattern, string, flags=0)

pattern.findall(string[, pos[, endpos]])
参数:

| 参数名 | 说明 |

|---|---|

| pattern | 匹配模式。 |

| string | 待匹配的字符串。 |

| pos | 可选参数,指定字符串的起始位置,默认为0。 |

| endpos | 可选参数,指定字符串的结束位置,默认为字符串的长度。 |

8.4.3.5 re.finditer

和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
语法:

re.finditer(pattern, string, flags=0)

**`参数:

| 参数 | 描述 |

|---|---|

| pattern | 匹配的正则表达式 |

| string | 要匹配的字符串。 |

| flags | 标志位,用于控制正则表达式的匹配方式 |

8.4.3.6 re.split

split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:

re.split(pattern, string[, maxsplit=0, flags=0])
参数:

| 参数 | 描述 |

|---|---|

| pattern | 匹配的正则表达式 |

| string | 要匹配的字符串。 |

| maxsplit | 分割次数,maxsplit=1 分割一次,默认为 0,不限制次数。 |

| flags | 标志位,用于控制正则表达式的匹配方式 |

相关推荐
努力进修36 分钟前
欢迎来到我的Java世界“抽象类”
java·开发语言·python
FreakStudio3 小时前
全网最适合入门的面向对象编程教程:48 Python函数方法与接口-位置参数、默认参数、可变参数和关键字参数
python·嵌入式·面向对象·电子diy
天下无敌笨笨熊4 小时前
PyQT开发总结
python·pyqt
机器学习Zero4 小时前
让效率飞升的秘密武器:解锁编程高效时代的钥匙
git·python·github·aigc
wjcroom5 小时前
celery-APP在windows平台的发布方法(绿色免安装exe可搭配eventlet)
windows·python·celery
AI让世界更懂你5 小时前
漫谈设计模式 [5]:建造者模式
python·设计模式·建造者模式
FutureUniant6 小时前
GitHub每日最火火火项目(9.13)
人工智能·python·计算机视觉·github·音视频
liuzhenghua666 小时前
python运维
运维·开发语言·python
学java的小菜鸟啊6 小时前
Java队列详细解释
java·开发语言·经验分享·python
ac-er88886 小时前
什么是Flask-WTF
后端·python·flask