📌  相关文章
📜  Python中的正则表达式 2(搜索,匹配和查找全部)

📅  最后修改于: 2020-04-15 07:07:37             🧑  作者: Mango

Python中的正则表达式和示例| 套装1
re模块提供对Python中正则表达式的支持。以下是此模块中的主要方法。

搜索模式的出现

re.search():此方法返回None(如果模式不匹配),或者返回re.MatchObject,其中包含有关字符串的匹配部分的信息。此方法在第一个匹配项后停止,因此它最适合于测试正则表达式,而不是提取数据。

# 一个Python程序,演示re.match()的工作方式。
import re
# 让我们使用正则表达式以月份名称和日期编号的形式匹配日期字符串
regex = r"([a-zA-Z]+) (\d+)"
match = re.search(regex, "I was born on June 24")
if match != None:
    # 当表达式“([[a-zA-Z] +)(\ d +)"与日期字符串匹配。
    # 这将打印[14,21),因为它在索引14处匹配并在21处结束。
    print "Match at index %s, %s" % (match.start(), match.end())
    # 我们使用group()方法获取所有匹配项和捕获的组,组包含匹配的值
    # 特别的:
    #    match.group(0)始终返回完全匹配的字符串
    #    match.group(1)match.group(2),...在输入字符串中按从左到右的顺序返回捕获组
    #    match.group()等同于match.group(0)
    # 所以这将打印 "June 24"
    print "Full match: %s" % (match.group(0))
    # 所以这将打印 "June"
    print "Month: %s" % (match.group(1))
    # 所以这将打印 "24"
    print "Day: %s" % (match.group(2))
else:
    print "The regex pattern does not match."

输出:

Match at index 14, 21
Full match: June 24
Month: June
Day: 24

匹配文本模式

re.match():此函数尝试将模式匹配到整个字符串。re.match函数成功返回匹配对象,失败则返回None。

re.match(pattern, string, flags=0)
pattern : 正则表达式要匹配.
string : 待搜索string
flags : 我们可以指定不同的标志使用按位或(|)。
# 一个Python程序,用于演示re.match()的工作。
import re
# 一个使用正则表达式的示例函数
# 查找日期的月份和日期.
def findMonthAndDate(string):
    regex = r"([a-zA-Z]+) (\d+)"
    match = re.match(regex, string)
    if match == None:
        print "Not a valid date"
        return
    print "Given Data: %s" % (match.group())
    print "Month: %s" % (match.group(1))
    print "Day: %s" % (match.group(2))
# 驱动程式码
findMonthAndDate("Jun 24")
print("")
findMonthAndDate("I was born on June 24")

查找所有出现的模式
re.findall():以字符串列表形式返回字符串模式的所有非重叠匹配,从左到右扫描字符串,并以找到的顺序返回匹配项(来源:Python Docs)。

# 一个Python程序来演示findall()的工作
import re
# 搜索正则表达式的示例文本字符串.
string  = """Hello my Number is 123456789 and
             my friend's number is 987654321"""
# 查找数字的正则表达式示例.
regex = '\d+'
match = re.findall(regex, string)
print(match)
# 此示例由芒果文档提供.
输出:
['123456789','987654321']

正则表达式是一个巨大的话题,它是一个完整的库。正则表达式可以做很多事情。您可以匹配,搜索,替换,提取大量数据。例如,下面的小代码是如此强大,以至于它可以从文本中提取电子邮件地址。因此,我们可以使用easy.Lake来在Python中创建自己的Web抓取工具和抓取工具。

# 提取所有电子邮件地址并将其添加到结果集中
new_emails = set(re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+",
                           text, re.I))

我们将很快讨论正则表达式的更多方法。