翼度科技»论坛 编程开发 python 查看内容

Python正则表达式完全指南

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
本篇文章将深入探讨python的一项强大工具:正则表达式。正则表达式是一个强大的文本处理工具,可以用来匹配,搜索,替换和解析文本。我们将逐步展示如何在Python中使用正则表达式,包括其基本语法,常见用法和一些高级技巧。而在最后的“one more thing”部分,我们将探索一个不为人知但又非常有用的正则表达式的技巧。
简单正则表达式匹配

在Python中,re模块提供了正则表达式的支持。我们先从最简单的字符匹配开始。
  1. import re
  2. # 检查字符串是否包含字母"a"
  3. txt = "Hello, world!"
  4. match = re.search("a", txt)
  5. print(match)  # 输出:None,因为"a"没有在字符串中
复制代码
在这个例子中,我们使用了re.search()函数来查找字符串中是否包含"a"。这是最基础的字符匹配,但已经可以看出正则表达式的用处。例如,你可以用这种方式检查一个电子邮件地址是否包含"@"。
使用元字符

正则表达式的真正威力在于其元字符的使用,比如.,*,?,[]等等。下面的例子展示了如何使用.(点)元字符匹配任何字符(除了新行)。
  1. txt = "Hello, world!"
  2. match = re.search("H.llo", txt)
  3. print(match.group())  # 输出:Hello
复制代码
在这个例子中,.字符匹配了"e",使得"H.llo"可以匹配"Hello"。
使用预定义的字符集

有时我们希望匹配的是一类字符,而不是单个字符。比如,我们可能想要匹配任何数字。Python的正则表达式提供了预定义的字符集来实现这种功能。\d就代表任何数字。
  1. txt = "123 Hello, world!"
  2. match = re.search("\d+", txt)
  3. print(match.group())  # 输出:123
复制代码
在这个例子中,\d+匹配了一串数字"123"。
分组和捕获

我们可以使用圆括号()创建子模式或组,并使用group()方法来捕获这些组。
  1. txt = "123 Hello, world!"
  2. match = re.search("(\d+) (Hello),", txt)
  3. print(match.group(1))  # 输出:123
  4. print(match.group(2))  # 输出:Hello
复制代码
使用正向先行断言

这是一个高级技巧,它允许我们在不消耗字符的情况下进行匹配。例如,我们可能想找出所有以句号结束但不包含句号的句子。
  1. txt = "Hello. My name is Python. Nice to meet you."
  2. matches = re.findall(".*?(?=\\.)", txt)
  3. for match in matches:
  4.     print(match)  # 输出:Hello,My name is Python,Nice to meet you
复制代码
在这个例子中,.*?(?=\\.)匹配了所有以句号结束的句子,但并没有消耗句号。
字符集和范围

我们之前讨论过预定义的字符集,比如\d。但有时我们可能需要自定义字符集,我们可以使用方括号[]来达成这个目标。例如,我们可以创建一个只包含小写字母的字符集。
  1. txt = "Hello, World!"
  2. match = re.search("[a-z]+", txt)
  3. print(match.group())  # 输出:ello
复制代码
在这个例子中,[a-z]+匹配了一串连续的小写字母"ello"。注意"Hello"的首字母"H"由于是大写,没有被匹配。
贪婪匹配和非贪婪匹配

Python的正则表达式默认是贪婪的,这意味着它们会尽可能匹配更多的字符。但有时我们可能希望进行非贪婪匹配。我们可以通过在量词后面添加问号?来实现这个功能。
  1. txt = "12345"
  2. match = re.search("\d+?", txt)
  3. print(match.group())  # 输出:1
复制代码
在这个例子中,\d+?进行了非贪婪匹配,只匹配了一个数字"1"。
零宽断言


零宽断言允许我们在字符之间设置条件。比如,我们可以使用(?

举报 回复 使用道具